Что нам для этого понадобится? Немного терпения и навык "Костылестроение" = 10 (на 3d).
Тонкая провокация. Кто знает, что за 3d я имел в виду?
Ладно, вернемся к теме - зачем "костылестроение"? А затем, что возможность установить разные обои на воркспейсы в Опенбоксе не реализована. Гугление на тему выдало единственный вменяемый результат, который скорее подсказал, как реализовать.
Основная идея: к кнопкам переключения воркспейсов вяжем изменение обоев. Итак:
Хоткеи в Опенбоксе настраиваются либо в глобальном /etc/xdg/rc.xml либо в ~/.config/openbox/rc.xml. Выбирайте, какой больше по душе. Находим нужные хоткеи:
|
<keybind key="C-A-Left"> <action name="DesktopLeft"> <dialog>no</dialog> <wrap>no</wrap> </action> </keybind> <keybind key="C-A-Right"> <action name="DesktopRight"> <dialog>no</dialog> <wrap>no</wrap> </action> </keybind>
|
и добавляем к ним дополнительный экшн
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
<keybind key="C-A-Left"> <action name="DesktopLeft"> <dialog>no</dialog> <wrap>no</wrap> </action> <action name="Execute"> <command>/path/to/wallpaper/script prev</command> </action> </keybind> <keybind key="C-A-Right"> <action name="DesktopRight"> <dialog>no</dialog> <wrap>no</wrap> </action> <action name="Execute"> <command>/path/to/wallpaper/script next</command> </action> </keybind>
|
Как видите, по нажатию соответствующей комбинации выполняется наш скрипт смены обоев с аргументами "next" или "prev". Теперь сам скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
#!/bin/bash
# Аргумент должен быть или "next" или "prev" < -z $1 > || (< $1 != "next" > && < $1 != "prev" >) && exit
DIRECTION=$1 ALLOW_ROTATE=0 # поставьте 1, если у вас можно переключать воркспейсы по кругу, # т.е. после последнего переключит на первый WS_NUM=2 # сколько всего воркспейсов WALLPAPERS_DIR=/path/to/wallpaper/dir SWITCH_WALLPAPER=1 # по дефолту разрешаем установку обоев CURR_WS_FILE=$HOME/.current-workspace # файлик, в котором будем хранить номер текущего # воркспейса
# если при загрузке ос вы начинаете не на первом воркспейсе - поменяйте номер в echo ! < -e "$CURR_WS_FILE" > && echo "1" > "$CURR_WS_FILE" CURR_WS=$(cat "$CURR_WS_FILE") NEXT_WS=$(( CURR_WS + 1 )) PREV_WS=$(( CURR_WS - 1 ))
if < $CURR_WS -eq $WS_NUM >; then # если можно переключать по кругу, то с последнего воркспейса переключимся на первый < $ALLOW_ROTATE -eq 1 > && NEXT_WS=1 # если нет - просто запрещаем смену обоев вперед с последнего воркспейса < $ALLOW_ROTATE -eq 0 > && < $DIRECTION = "next" > && SWITCH_WALLPAPER=0 elif < $CURR_WS -eq 1 >; then # если можно переключать по кругу, то с первого воркспейса переключимся на последний < $ALLOW_ROTATE -eq 1 > && PREV_WS=$WS_NUM # если нет - просто запрещаем смену обоев назад с первого воркспейса < $ALLOW_ROTATE -eq 0 > && < $DIRECTION = "prev" > && SWITCH_WALLPAPER=0 fi
if < $SWITCH_WALLPAPER -eq 1 >; then if < $DIRECTION = "next" >; then WALLPAPER=$NEXT_WS echo $NEXT_WS > "$CURR_WS_FILE" else WALLPAPER=$PREV_WS echo $PREV_WS > "$CURR_WS_FILE" fi
# для переключения обоев использую hsetroot # если вам привычнее другая тулза - меняйте < -L "$WALLPAPERS_DIR"/$WALLPAPER > && /usr/bin/hsetroot -tile "$WALLPAPERS_DIR"/$WALLPAPER fi # В $WALLPAPER у нас лежит номер текущего воркспейса. # В папке с обоями сделаем симлинки типа # 1 -> ./wallpaper-for-first-workspace.png
|
Делаем наши симлинки:
|
cd /path/to/wallpaper/dir ln -s wallpaper-for-first-workspace.png 1 ln -s wallpaper-for-second-workspace.png 2 и так далее
|
Завершающий штрих, при загрузке системы нужно записать номер стартового воркспейса в $HOME/.current-workspace и установить правильные обои.
|
$ cat $HOME/.config/openbox/autostart.sh # в автостарте, насколько я помню не работают $HOME и ~ echo "1" > /home/user/.current-workspace hsetroot -tile "/path/to/wallpaper/dir"`cat /home/user/.current-workspace`
|
Вуаля, теперь у вас каждый воркспейс обладает собственными обоями. Get a beer.
P.S. Напомню, что переключать воркспейсы по дефолту можно не только комбинацией Ctrl+Alt+Arrow, но и скроллом мышки и еще какими-то. Эти комбинации не будут менять обои (и более того, поломают порядок расстановки обоев по воркспейсам), если вы не добавите к ним соответствующие экшны. Так же скрипт не учитывает, что воркспейсы можно переключать вверх/вниз
UPDATED:
Спасибо
muhas'у за совет: man wmctrl решил все дело. По итогу скрипт действительно занимает 3 строчки :)
|
CURR_WS=$(( $(wmctrl -d | gawk '$2 ~ "*" {print $1}') + 1 )) WALLPAPERS_DIR=/path/to/wallpaper/dir hsetroot -tile "$WALLPAPERS_DIR/$CURR_WS"
|
Из rc.xml можно убрать аргументы "next" и "prev". Также выяснилась любопытная штука, а именно, action'ы заданные в rc.xml, Openbox выполняет не последовательно, а параллельно. В частности, у меня первым висит action "поставить обои", а вторым "перейти на другой десктоп" и все-равно wmctrl из скрипта возвращает мне current workspace'ом тот, на который я собираюсь переходить.
после обхода всех воркспейсов убивал бы проверку...
а вообще я бы лучше прочел ещё раз man wmctrl и нашел бы возможность выполнять команду на нужном рабочем столе(wmctrl -r команда -t стол)... хотя тот же devilspie в этом поможет