Для построения решения Редсандро:
Следуйте советам Redsandro и sudo apt-get install xdotool
и создайте какой-нибудь скрипт conky-remap.sh
(или любой другой) в вашем каталоге /usr/local/bin
(или где-либо еще). Также установите wmctrl
, если у вас его еще нет. Мы будем использовать это, чтобы сделать Conky активным (я знаю, что это отличается от отображения, но оно ведет себя так, как я ожидаю, поэтому я не волнуюсь.)
запустите wmctrl -l
, чтобы вывести список всех окон, пока работает Conky, и принять к сведению заголовок Конки (у меня было что-то вроде Conky (<my-machine-name>)
.
Пока вы создаете другой файл, в котором мы сохраним текущее состояние рабочего стола (0 = не show-desktop-mode, 1 = show-desktop-mode ... почти), называется что-то вроде .conky_desktop_state
. Я поместил это и в /usr/local/bin
. Теперь вернемся к conky-remap.sh
:
#!/usr/bin/env bash
state=$(cat /usr/local/bin/.conky_desktop_state)
dt=$(xdotool get_desktop)
if (( $state == 1 )) ; then
echo 0 > /usr/local/bin/.conky_desktop_state
wmctrl -a "Conky (<my-machine-name>)"
else
echo 1 > /usr/local/bin/.conky_desktop_state
wmctrl -a "Conky (<my-machine-name>)"
xdotool search --desktop $dt . windowmap %@
fi
wmctrl
команда активировать окно не заботится о том, находится ли рабочий стол в фокусе или нет, поэтому нам не нужно спать или высвечивать диалоговое окно на экране. $state
и $dt
- это переменные, в которых хранится текущее состояние рабочего стола (опять же, вид) и текущий идентификатор рабочего стола.
xdotool search --desktop $dt . windowmap %@
отображает все окна с текущего рабочего стола обратно на экран и оставляет другие рабочие столы в покое.
Редактировать ~/.config/openbox/lubuntu-rc.xml
или где выполнять скрипт при нажатии Win + D.
<keybind key="W-d">
<action name="ToggleShowDesktop"/>
<action name="Execute">
<command>conky-remap.sh</command>
</action>
</keybind>
openbox --reconfigure
для обновления сочетаний клавиш, и вы должны быть в порядке.
Благодаря Win-D для отображения рабочего стола рабочий стол сфокусирован, поэтому вы можете использовать клавиши со стрелками для навигации по значкам на рабочем столе.
У этого решения есть свой набор причуд:
- Второе нажатие Win + D вызывает все окна текущего рабочего стола, а не только те, которые были активны до отображения рабочего стола.
- Переключатель хранится в
.conky_desktop_state
, но на самом деле он не совпадает с show-desktop-mode
, так как переключается только при выполнении сценария. Это означает, что можно показывать один рабочий стол, а другой нет. В этом случае рабочий стол будет показан кратко, а затем все окна будут активированы. Еще одно нажатие Win + D покажет рабочий стол.
- Иногда все терпит неудачу, и Конки исчезает со всеми другими окнами, хотя и редко. Просто
cat /usr/.../.conky_desktop_state
и переключите противоположное значение в (т.е.- echo 1 > /usr/.../.conky_desktop_state
)
- Хотя в большинстве случаев последнее активное окно перед Win + D находится сверху после второго Win + D, оно не обязательно активно, то есть вам, возможно, придется щелкнуть в окне или Alt + Tab, чтобы начать печатать. в этом. Обычно это касается окон терминала.
В идеале мы могли бы просматривать все активные (сопоставленные) окна на каждом рабочем столе по отдельности и выполнять ту или иную команду, основываясь на том, является ли Conky единственным активным окном, но я не был достаточно умен (выделен) сделай так, вот мой вклад. Пожалуйста, основывайтесь на этом и отвечайте.