Я пытаюсь создать быстрый список на панели запуска Workspace Switcher, который позволяет быстро переключаться на определенную рабочую область. (Мой друг иногда использует мой компьютер и просто не пользуется сочетаниями клавиш, поэтому я хочу помочь ему.)
Итак, есть ли команда, которую можно ввести в терминале, которая заставит определенное рабочее пространство быть сконцентрироваться на?
Вы можете использовать wmctrl.
основные команды:
wmctrl -d
для отображения всех Ваших рабочих пространств.
wmctrl -s <имя_рабочего пространства>
для перехода к конкретному рабочему пространству.
Если Вы используете Compiz, Вам придется сделать трюк, потому что Compiz "рабочие области" на самом деле являются Viewports (Вьюпортами) одной рабочей области.
Проверьте вывод wmctrl -d
Например, мой - это:
0 * DG: 4098x2304 VP: 1366,0 WA: 0,23 1366x745 N/A
Это означает, что на самом деле у меня есть одна рабочая область 4098 x 2304 вместо того, что я "думаю" (девять "рабочих областей", 3 x 3).
.
Я был на том, что должно было быть "рабочее пространство" 2, но на самом деле я был на смотровом окне (VP) 1366,0 (4098 / 3 = 1366), как видно из вывода выше. Так вот как это работает: мы берем всю рабочую область и делим на числа "рабочих пространств", которые, как мы "думаем", у нас есть. В моем случае: 4098 / 3 = 1366 и 2304 / 3 = 768.
Если я хочу перейти на свою "рабочую область" 1, команда:
wmctrl -o 0,0
Затем, если я хочу перейти на свою "рабочую область" 4, команда:
wmctrl -o 0,768
Если я хочу перейти на свою "рабочую область" 8, команда:
wmctrl -o 1366,1536
Если я хочу перейти на свою "рабочую область" 9, команда:
wmctrl -o 2732,1536
Поняли? ;-)
Флаг -o
"усекает" их значения.
Другими словами, он изменяет "рабочую область", к которой принадлежит действительный пиксел.
Следующее эквивалентно:
wmctrl -o 0,0
wmctrl -o 1365,767
Очень просто достичь желаемого с помощью xdotool
, у которого есть несколько вариантов управления различными рабочими пространствами (также известными как «рабочие столы» в документации программы). Я считаю, что объединение команд из man xdotool
может быть очень интересным и творческим; команды, которые я сформулировал ниже, могут быть полезны в сценариях.
Примечание: С некоторыми оконными менеджерами или если вы используете compiz
, вам может потребоваться использовать команды xdotool
, такие как set_desktop_viewport
и get_desktop_viewport
. Возможно, вам придется указать команды по-другому, как предлагает desgua выше, но для меня команды set_desktop
и set_desktop_for_window
оказались наиболее полезными в среде без компиляции system.)
( Решение наиболее полезно для пользователей Xubuntu / Lubuntu или тех, у кого не запущен compiz и т. д. )
Чтобы указать количество текущих рабочих пространств, введите
xdotool get_num_desktops
Следующие команды будут работать, только если у вас есть хотя бы 1 другое рабочее пространство.
Чтобы переключить фокус на рабочее пространство 1, просто введите
xdotool set_desktop 1
Затем, чтобы вернуться в рабочее пространство по умолчанию, введите
xdotool set_desktop 0
Рабочее пространство просто необходимо указать в качестве последнего значения в команде (1, 2 или 3 и т. д.).
Чтобы узнать номер рабочей области, в которой вы сейчас находитесь, вы можете использовать
xdotool get_desktop
Эти команды могут использоваться в сценариях, и они должны быть очень полезно для достижения того, что вам нужно.
О том, как переключить приложения на конкретный рабочий стол, см. мой ответ здесь:
Для получения дополнительных полезных опций, доступных для переключения рабочего пространства, обратитесь к man xdotool
.
Я реализовал сценарий, который делает то, что вы хотите. Вот он: https://github.com/norswap/wmov/blob/master/wmov.sh
Он действительно работает так, как описано в сообщении desgua. Это также возможность отправлять окна в другие рабочие области.
Есть скрипт, называемый compiz-send. py на compiz wiki, который частично решает ваш вопрос: это не конкретная рабочая область, но вы можете добраться до соседней.
С его помощью вы можете выполнить команду
./compiz-dbus-send.py put_viewport_left_key
./compiz-dbus-send.py put_viewport_right_key
and have viewport go 1 on the left or right.
Переход в конкретное рабочее пространство и выполнение действий в нем можно реализовать с помощью Python и библиотеки pyautogui , который позволяет сценариям Python выполнять щелчки мышью, нажатия клавиш и т. д.
Я написал короткое руководство на форуме Peppermint OS о запуске приложения на определенном рабочем месте.
] Обновление для ответа Desgua - похоже, wmctrl -d
выводит иначе для Ubuntu 18.04.
Это также обеспечивает ярлыки для первого, последнего и нового рабочих пространств, или в качестве функции вы можете вызвать __ ws_switch N
, где N
- номер рабочего пространства.
0 * DG: 1920x1080 VP: 0,0 WA: 0,28 1920x1052 Workspace 1
1 - DG: 1920x1080 VP: N/A WA: 0,28 1920x1052 Workspace 2
2 - DG: 1920x1080 VP: N/A WA: 0,28 1920x1052 Workspace 3
3 - DG: 1920x1080 VP: N/A WA: 0,28 1920x1052 Workspace 4
4 - DG: 1920x1080 VP: N/A WA: 0,28 1920x1052 Workspace 5
5 - DG: 1920x1080 VP: N/A WA: 0,28 1920x1052 Workspace 6
6 - DG: 1920x1080 VP: N/A WA: 0,28 1920x1052 Workspace 7
7 - DG: 1920x1080 VP: N/A WA: 0,28 1920x1052
Обратите внимание на последний пробел. рабочее пространство, которое в настоящее время не используется. Предполагая, что под последним рабочим пространством мы подразумеваем последнее рабочее пространство, которое использовалось, может сработать следующее:
cat << EOF >> "$script_dir"/ws.sh
#!/bin/sh
__ws_count() {
__ws_counter="$(wmctrl -d | wc -l)"
echo "$(( __ws_counter - 1 ))"
}
__ws_switch() {
# Sanity test if "$1" is an int
case "$1" in ''|*[^0-9]*)
echo "Input '$1' is not an integer"
return 1 ;;
esac
if test "$1" -gt "$(__ws_count)"; then
echo "Workspace #$1 doesn't exist"
return 1
fi
wmctrl -s "$1"
}
__ws_first() {
__ws_switch 0
}
__ws_last() {
__ws_counter="$(__ws_count)"
__ws_switch "$(( __ws_counter - 1 ))"
}
__ws_new() {
__ws_counter="$(__ws_count)"
__ws_switch "$(( __ws_counter ))"
}
EOF
Чтобы добавить в качестве ярлыка с помощью xbindkeys
, создайте следующие файлы ярлыков:
cat << EOF >> "$script_dir"/ws_first.sh
#!/bin/sh
. ./ws.sh
__ws_first
EOF
cat << EOF >> "$script_dir"/ws_last.sh
#!/bin/sh
. ./ws.sh
__ws_last
EOF
cat << EOF >> "$script_dir"/ws_new.sh
#!/bin/sh
. ./ws.sh
__ws_new
EOF
Затем chmod + x ./ws.sh ./ws_first.sh ./ws_last.sh ./ws_new.sh
, чтобы сделать их исполняемыми. Наконец, чтобы добавить к .xbindkeysrc
:
cat << EOF >> ~/.xbindkeysrc
"$script_dir/ws_first.sh"
Alt + Alt_L + w + f
"$script_dir/ws_last.sh"
Alt + Alt_L + w + l
"$script_dir/ws_new.sh"
Alt + Alt_L + w + n
EOF
РЕДАКТИРОВАТЬ : не забудьте перезапустить xbindkeys
, чтобы изменения вступили в силу:
killall xbindkeys && xbindkeys