키 바인딩이 있습니다 ToggleShowDesktop
. 을 누르면 Menu모든 창이 최소화되고 바탕 화면 배경 무늬가 예상대로 표시됩니다.
<keybind key="Menu">
<action name="ToggleShowDesktop"/>
</keybind>
이제 문제는 내 배경화면을 보고 싶지 않다는 것입니다. terminator
시작했을 때 terminator
아래 레이어에 배치된 배경화면을 사용했습니다 .
<application name="terminator">
<focus>yes</focus>
<layer>below</layer>
<desktop>1</desktop>
<position>
<y>0</y>
<x>0</x>
</position>
<skip_taskbar>yes</skip_taskbar>
<maximized>true</maximized>
</application>
ToggleShowDesktop
"아래" 레이어가 영향을 받지 않도록 구성할 수 있나요 ? 즉, 일반 창을 최소화하고 싶지만 최소화하지는 않습니다 terminator
. 즉, 터미네이터가 ToggleShowDesktop
.
Debian Wheezy
와 함께 사용하고 있습니다 LXDE
.
(@Suchipi가 제안한 방법 사용):
원래 질문에서 여전히 관련성이 있는 몇 가지 세부 정보를 생략했습니다.
내 설정에는 모니터 2개와 가상 데스크톱 4개가 있습니다. 그래서 나는 채울 "8개의 배경화면"을 가지고 있습니다 terminator
. 이전에 읽은 내용을 토대로 8개의 창을 구별할 수 있어야 한다고 가정하여 8개의 terminator
.ie 기호를 만들었습니다.
/usr/bin/terminator-wallpaper-1a -> terminator
/usr/bin/terminator-wallpaper-1b -> terminator
/usr/bin/terminator-wallpaper-2a -> terminator
...
실제로 8개의 서로 다른 애플리케이션(다른 이름 포함)이 생성되었습니다.
마찬가지로 .config/openbox/lxde-rc.xml
I에는 1개의 정의가 아니라 8개의 정의가 있습니다.
<application name="terminator-wallpaper-1a">
<desktop>1</desktop>
<position>
<monitor>1</monitor>
</position>
...
</application>
<application name="terminator-wallpaper-1b">
<desktop>1</desktop>
<position>
<monitor>2</monitor>
</position>
...
</application>
<application name="terminator-wallpaper-2a">
<desktop>2</desktop>
<position>
<monitor>1</monitor>
</position>
...
</application>
결국 로그인 후 자동으로 시작되는 /.config/autostart
8개의 파일이 생겼습니다 .*.desktop
/.config/autostar/terminator-wallpaper-1a.desktop
/.config/autostar/terminator-wallpaper-1b.desktop
/.config/autostar/terminator-wallpaper-2a.desktop
내 생각에는 이것은 지나치게 복잡하고 우아하지 않은 것 같지만 이보다 더 좋은 방법은 없습니다.
이제 @Suchpi의 지침을 따르면 다음과 같은 일이 발생합니다.
1) 부분적으로 devilspie
작동합니다. 8개의 창을 모두 포함하는 하나의 정의(replacement matches
) 가 필요하다는 것이 밝혀졌습니다 is
.
$ cat .devilspie/terminator.ds
(if
(matches (application_name) "terminator-wallpaper")
(begin
(wintype "desktop")
)
)
obxprop
예상대로 작동하는 것을 볼 수 있습니다 .
$ obxprop | egrep '(_OB_APP|_NET_WM_WINDOW_TYPE)'
_OB_APP_TYPE(UTF8_STRING) = "normal"
_OB_APP_TITLE(UTF8_STRING) = "None"
_OB_APP_CLASS(UTF8_STRING) = "Terminator-wallpaper-1"
_OB_APP_NAME(UTF8_STRING) = "terminator-wallpaper-1"
_OB_APP_ROLE(UTF8_STRING) =
_NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_DESKTOP
2) 이제 부분이 xdotool
더 까다로워졌습니다. 첫째, 100%
사용된 해상도가 작동하지 않습니다. 즉, 창이 사라집니다(보이지 않습니다). 정적을 사용하는 경우:
xdotool search --class "Terminator-wallpaper-1a" windowunmap --sync windowmap windowsize %1 1920 1056
이는 데스크탑 1 모니터 1에서 작동합니다. 그러나 다른 데스크톱에서 실행하면 효과가 없습니다. 즉, 다음과 같습니다.
xdotool search --class "Terminator-wallpaper-2a" windowunmap --sync windowmap windowsize %1 1920 1056
실제로 다른 데스크탑에서도 작동하지만 xdotool
영향을 미치고 싶은 특정 데스크탑에서 명령을 실행하는 경우에만 가능합니다. 즉, 데스크톱으로 전환 2
하고 실행 xdotool search --class "Terminator-wallpaper-2a"
해야 작동합니다.
windowsize %1
또한, 여기에도 적용되는지 알고 싶습니다 .
2019-12-07 업데이트:
그래서 저는 이제 Debian Buster(Openbox 3.6)에서 동일한 시스템을 설정하려고 하는데 새로운 문제에 직면하게 되었습니다. 새 버전의 Openbox에서 일부 속성이 변경된 것 같습니다.
모든 것이 이전과 동일한 것 같습니다.
terminator-wallpaper-1a --profile wallpaper -b &
terminator-wallpaper-1b --profile wallpaper -b &
xdotool search --class 'Terminator-wallpaper-1a' windowunmap --sync windowmap windowsize %1 1920 1180
xdotool search --class 'Terminator-wallpaper-1b' windowunmap --sync windowmap windowsize %1 1920 1180
바탕 화면으로 두 개의 터미널이 있습니다. 하지만 문제는 이 터미널 중 하나만 실제로 사용할 수 있다는 것입니다. 다른 하나는 '무초점'인데 마우스로 클릭해도 초점이 안맞네요. 즉, 터미널은 보이지만 입력할 수는 없습니다.
이 문제는 이전 Openbox 버전에서는 존재하지 않았습니다.
이 문제를 어떻게 해결할 수 있나요?
답변1
_OB_APP_TYPE
Openbox는 속성이 "Desktop"으로 설정된 창에 대해 여러분이 찾고 있는 기능을 제공합니다( obxprop
창의 속성을 검사하는 데 사용할 수 있음). 따라서 _OB_APP_TYPE
이를 위해서는 종료자 창을 "Desktop"으로 설정 해야 합니다 .
openbox 소스 코드 를 읽어 client.c
보니 . 내가 찾은 앱은 입니다 ._OB_APP_TYPE
_NET_WM_WINDOW_TYPE
_NET_WM_WINDOW_TYPE
devilspie
먼저 다음을 설치하세요.
sudo apt-get install devilspie
다음으로 구성 파일용 폴더를 만듭니다 devilspie
.
mkdir ~/.devilspie
이제 이름이 지정된 애플리케이션 을 devilspie
찾고 terminator
해당 창 유형을 로 설정하도록 지시하는 구성 파일을 추가하겠습니다 desktop
.~/.devilspie/terminator.ds
(if
(is (application_name) "terminator")
(begin
(wintype "desktop")
)
)
이제 실행하면 devilspie
(또는 devilspie -a
새로 생성된 창 대신 기존 창에 영향을 미치면) 변경되었지만 아직 변경되지 않은 obxprop
종결자가 사용되었는지 알 수 있습니다. 창 매핑을 해제하고 다시 매핑해 보겠습니다(X11 용어로 이는 그리기를 중지하고 창 그리기를 시작한다는 의미). 그러면 openbox가 이 값을 인식하게 됩니다._NET_WM_WINDOW_TYPE
_OB_APP_TYPE
xdotool
xdotool을 설치합니다:
sudo apt-get install xdotool
그런 다음 다음 스크립트를 실행하여 terminator
창을 찾아 매핑을 해제하고 매핑이 해제될 때까지 기다린 다음 다시 매핑합니다. 또한 매핑을 해제했다가 다시 매핑할 때 최대화가 손실되었기 때문에 창 크기를 조정했습니다.
xdotool search --class "terminator" windowunmap --sync windowmap windowsize %1 1024 768
1024 768
당신의 결심으로 바꾸십시오 . 또한 xdotool
Debian apt repo에 있는 버전보다 최신 버전은 100% 100%
정적 구문 분석 대신 사용을 지원합니다. 최신 버전의 .deb
패키지로 최신 버전을 찾을 수 있습니다 .xdotool
xdotool의 googlecode 페이지.
종료자 창은 즉시 데코레이션되지 않은 상태로 변경되며, 지금 사용하면 obxprop
두 값이 모두 올바르게 설정된 것을 볼 수 있습니다. 지금 바운드 키를 여러 번 누르면 ToggleShowDesktop
종료자 창이 항상 활성 상태로 유지됩니다.
이를 영구적으로 만들려면 로그인할 때 다음 명령을 실행해야 합니다. 이것LXSession에 대한 LXDE Wiki 페이지이를 수행하는 여러 가지 방법(전역, 사용자별, 프로필별 등)을 보여줍니다. 이러한 설정을 사용자에게만 적용하고 LXDE 프로필(기본값) 아래에서 ~/.config/lxsession/LXDE/autostart
우리가 실행하는 명령을 편집하고 추가해야 한다고 가정하면, 터미네이터 창을 렌더링한 후에 xdotool 명령을 실행해야 한다는 점을 기억하십시오 (sleep 1s & xdotool ...)
. 원한다면 이러한 명령을 openbox의 키 바인딩으로 설정할 수도 있습니다.
답변2
문제를 해결할 수 있을 것 같은 다음 스크립트를 생각해 냈습니다.
#!/bin/sh
make_wid_desktop_app() {
# set the type of the window to
xprop -id $1 -f _NET_WM_WINDOW_TYPE 32a -set _NET_WM_WINDOW_TYPE _NET_WM_WINDOW_TYPE_DESKTOP
xprop -id $1 -f _MOTIF_WM_HINTS 32c -set _MOTIF_WM_HINTS 0
xprop -id $1 -remove _MOTIF_WM_HINTS
}
get_wids() {
xdotool search --class $1
}
for id in $(get_wids $1); do
make_wid_desktop_app $id;
done
이렇게 사용하시면 됩니다.
desktop_terminal terminator-wallpaper
terminator-wallpaper
with 클래스가 있는 모든 창을 검색하여 with 로 xdotools
변경합니다 ._NET_WM_WINDOW_TYPE
_NET_WM_WINDOW_TYPE_DESKTOP
xprop
Openbox는 창을 생성한 후 이 유형이 변경되었는지 확인하지 않으므로 Openbox를 속여 이 작업을 수행해야 합니다. 이는 _MOTIF_WM_HINTS
설정 및 삭제를 통해 수행됩니다.
devilspie
추가해도 동일한 효과를 얻을 수 있습니다.
(if
(matches (application_name) "terminator-wallpaper")
(begin
(wintype "desktop")
(undecorate)
)
)
창을 로 설정하는 것도 트릭 (undecorate)
이기 때문입니다._MOTIF_WM_HINTS
답변3
질문에 올바르게 대답했다면 문제는 다음과 같습니다. 을 클릭할 때마다 을 ToggleShowDesktop
제외한 열려 있는 모든 응용 프로그램을 최소화하려고 합니다 terminator
.
그렇다면 내부적으로 두 개의 명령을 호출하는 래퍼 스크립트를 작성하여 이를 달성할 수 있습니다.
#!/bin/sh
xdotool key "super+d"
wmctrl -a "terminator"
실제 ToggleShowDesktop 바이너리/스크립트를 위의 래퍼 스크립트로 바꾸세요.
더러워 보일 수도 있지만 작동합니다.