(@Suchipi가 제안한 방법 사용):

(@Suchipi가 제안한 방법 사용):

에 대한 키 바인딩이 있습니다 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.xmlI에는 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/autostart8개의 파일이 있습니다 .*.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_TYPEdevilspie

먼저 다음을 설치하세요.

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_TYPExdotool

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-wallpaperwith 이고 xdotools변경된 모든 창 을 검색합니다 ._NET_WM_WINDOW_TYPE_NET_WM_WINDOW_TYPE_DESKTOPxprop

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 바이너리/스크립트를 교체합니다.

더러운 해킹처럼 보일 수도 있지만 작동합니다.

관련 정보