%3A.png)
에 대한 키 바인딩이 있습니다 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개가 있습니다. 그래서 저는 terminator
. 이전에 읽은 내용에 따르면 이 8개의 창이 구별 가능해야 한다고 가정하여 terminator
.ie에 8개의 심볼릭을 만들었습니다.
/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
이것은 나에게 매우 복잡하고 우아하지 않은 것처럼 보이지만 더 나은 방법을 찾지 못했습니다.
이제 @Suchi의 지침을 따르면 다음과 같은 일이 발생합니다.
1) 작동하는 부분은 devilspie
괜찮습니다. 알고 보니 8개 창을 모두 포함하는 단 하나의 정의만 필요했습니다( 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
Openbox는 속성이 "데스크톱"으로 설정된 창에 여러분이 찾고 있는 기능을 제공합니다 ( 창의 속성을 확인하는 데 _OB_APP_TYPE
사용할 수 있음 ). 따라서 이러한 일이 발생하도록 종료자 창을 "데스크톱"으로 obxprop
설정해야 합니다 ._OB_APP_TYPE
오픈박스 소스코드 를 읽어 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
데비안의 적절한 저장소에 있는 버전보다 최신 버전은 100% 100%
정적 해상도 대신 사용을 지원합니다. .deb
최신 버전의 패키지는 xdotool
다음에서 찾을 수 있습니다 .xdotool의 googlecode 페이지.
종료자 창은 즉시 장식이 해제되며, 이제 를 사용하면 obxprop
두 값이 모두 올바르게 설정된 것을 볼 수 있습니다. 이제 바인딩한 키를 ToggleShowDesktop
몇 번 누르면 종료자 창이 항상 활성 상태로 유지됩니다.
이를 지속적으로 만들려면 로그인 시 다음 명령을 실행해야 합니다. 그만큼LXSession용 LXDE 위키 페이지이를 수행하는 여러 가지 방법(전역, 사용자별, 프로필별 등)을 보여줍니다. 사용자와 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 이고 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 바이너리/스크립트를 교체합니다.
더러운 해킹처럼 보일 수도 있지만 작동합니다.