Есть ли команда для перехода в определенное рабочее пространство?
Я пытаюсь сделать быстрый список на панели запуска Workspace Switcher, который позволяет быстро переключаться на определенную рабочую область. (Мой друг иногда использует мой компьютер и просто не пользуется сочетаниями клавиш, поэтому я хочу помочь ему.)
Так есть ли команда, которую можно ввести в терминале, которая заставит определенное рабочее пространство быть сосредоточенным?
4 ответа
Вы можете использовать wmctrl.
Основные команды:wmctrl -d
чтобы показать все ваши рабочие пространства.wmctrl -s <workspace_name>
изменить на конкретное рабочее пространство.
Если вы используете 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
Команды оказались наиболее полезными в некомпизированной системе.)
(Решение наиболее полезно для пользователей 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
Это действительно работает, как описано в посте Десгуа. Это также возможности отправки окон в другие рабочие пространства.
Переход в конкретное рабочее пространство и выполнение действий в нем можно реализовать с помощью 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
В wiki compiz есть скрипт compiz-send.py, который частично решает ваш вопрос: это не конкретное рабочее пространство, но вы можете перейти к следующему.
С этим вы можете выполнить команду./compiz-dbus-send.py put put_viewport_left_key
./compiz-dbus-send.py put put_viewport_right_key
и заставьте область просмотра идти 1 налево или направо.