Это - просто точка монтирования, и это означает, что это - окно для наблюдения файлов. Точка монтирования является точкой подключения, которые подключают систему к ресурсу.. таким образом, это не использует ресурсов, но каталог, который Вы подключаете к точке монтирования, станет неиспользованным для системы, пока это не будет содержать смонтированное устройство, даже если это имеет данные внутри.
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, если хотите.
Если я правильно понял вопрос, то ваш вопрос такой: всякий раз, когда вы нажимаете на ToggleShowDesktop
, вы хотите, чтобы все открытые приложения были свернуты, за исключением Терминатора
.
Если это так, то вы можете достичь этого, написав оберточный сценарий, который будет внутренне вызывать две команды
#!/bin/sh
xdotool key "super+d"
wmctrl -a "terminator"
Заменить фактический двоичный/скрипт ToggleShowDesktop вышеуказанным оберточным сценарием
Это может показаться грязным взломом, но он работает.
.Я придумал следующий скрипт, который выглядит так, как будто он решает ваши проблемы.
#!/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
.