Есть ли команда для перехода в определенное рабочее пространство?

Я пытаюсь создать быстрый список на панели запуска Workspace Switcher, который позволяет быстро переключаться на определенную рабочую область. (Мой друг иногда использует мой компьютер и просто не пользуется сочетаниями клавиш, поэтому я хочу помочь ему.)

Итак, есть ли команда, которую можно ввести в терминале, которая заставит определенное рабочее пространство быть сконцентрироваться на?

26
задан 8 May 2011 в 01:58

6 ответов

Вы можете использовать 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
39
ответ дан 8 May 2011 в 01:58

Очень просто достичь желаемого с помощью 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 .

10
ответ дан 8 May 2011 в 01:58

Я реализовал сценарий, который делает то, что вы хотите. Вот он: https://github.com/norswap/wmov/blob/master/wmov.sh

Он действительно работает так, как описано в сообщении desgua. Это также возможность отправлять окна в другие рабочие области.

1
ответ дан 8 May 2011 в 01:58

Есть скрипт, называемый 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.

0
ответ дан 8 May 2011 в 01:58

Переход в конкретное рабочее пространство и выполнение действий в нем можно реализовать с помощью Python и библиотеки pyautogui , который позволяет сценариям Python выполнять щелчки мышью, нажатия клавиш и т. д.

Я написал короткое руководство на форуме Peppermint OS о запуске приложения на определенном рабочем месте.

]
0
ответ дан 23 November 2019 в 01:33

Обновление для ответа 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
0
ответ дан 4 January 2021 в 12:08

Другие вопросы по тегам:

Похожие вопросы: