настройте ToggleShowDesktop в Openbox, чтобы только действовать на указанный слой

Это - просто точка монтирования, и это означает, что это - окно для наблюдения файлов. Точка монтирования является точкой подключения, которые подключают систему к ресурсу.. таким образом, это не использует ресурсов, но каталог, который Вы подключаете к точке монтирования, станет неиспользованным для системы, пока это не будет содержать смонтированное устройство, даже если это имеет данные внутри.

7
07.12.2019, 13:38
3 ответа

Openbox предоставит нужную функциональность окнам, для которых свойство _OB_APP_TYPE установлено в "desktop" (Вы можете использовать obxprop для проверки свойств окна). Поэтому нам необходимо установить свойство _OB_APP_TYPE для окна терминатора на "рабочий стол", чтобы это произошло.

Читая исходный код 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 на терминаторе, что _NET_WM_WINDOW_TYPE изменилось, но _OB_APP_TYPE еще нет. Используем xdotool для распаковки и переноса окна (в терминологии X11 это означает, что мы прекратим рисовать и начнем рисовать окно), что должно заставить openbox заметить значение.

Установите xdotool:

sudo apt-get install xdotool

Затем запустим следующий скрипт, чтобы найти окно терминатора, распечатать его, подождать, пока оно не будет распечатано, а затем переназначить его. Мы также изменяем размер окна, потому что когда оно было распаковано и переназначено, оно потеряло свою максимализацию:

xdotool search --class "terminator" windowunmap --sync windowmap windowsize %1 1024 768

Замените 1024 768 на ваше разрешение. Также обратите внимание, что более новые версии xdotool, чем те, что находятся в поддержке apt repo в Debian, используют 100% вместо статического разрешения. Вы можете найти .deb пакеты для более новых версий xdotool на странице googlecode xdotool.

Окно терминатора немедленно станет незадекорированным, и если вы теперь используете obxprop, вы увидите, что оба значения были установлены правильно. Если Вы теперь несколько раз нажмете кнопку, к которой была привязана ToggleShowDesktop, окно терминатора всегда будет оставаться активным.

Чтобы сделать это постоянным, вы захотите запустить эти команды при входе в систему. Вики-страница LXDE для LXSession показывает несколько различных способов сделать это (глобальный, для каждого пользователя, для каждого профиля и т.д.). Предположим, что вы хотите, чтобы эти настройки были доступны только для вашего пользователя и под профилем LXDE (по умолчанию), вы захотите отредактировать ~/.config/lxsession/LXDE/autostart и добавить команды, которые мы запустили, помня, что команда xdotool должна быть запущена после отрисовки окна терминатора, поэтому сделайте что-нибудь вроде (sleep 1s & xdotool ...). Вы также можете установить эти команды в качестве клавишных в openbox, если хотите.

7
27.01.2020, 20:17

Если я правильно понял вопрос, то ваш вопрос такой: всякий раз, когда вы нажимаете на ToggleShowDesktop, вы хотите, чтобы все открытые приложения были свернуты, за исключением Терминатора.

Если это так, то вы можете достичь этого, написав оберточный сценарий, который будет внутренне вызывать две команды

#!/bin/sh
xdotool key "super+d" 
wmctrl -a "terminator"

Заменить фактический двоичный/скрипт ToggleShowDesktop вышеуказанным оберточным сценарием

Это может показаться грязным взломом, но он работает.

.
0
27.01.2020, 20:17

Я придумал следующий скрипт, который выглядит так, как будто он решает ваши проблемы.

#!/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

Он ищет все окна, которые имеют класс терминатор-обои с 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.

.
2
27.01.2020, 20:17

Теги

Похожие вопросы