Вопрос wmctrl говорит, что у меня есть одно рабочее пространство, когда у меня есть четыре


Я пытаюсь создать один gvim для каждой рабочей области, используя этот скрипт в качестве отправной точки: http://www.openhex.org/notes/2011/1/27/one-vim-server-per-desktops

Я знаю, когда я впервые нашел этот сценарий несколько месяцев назад, wmctrl -d перечисленные четыре рабочих пространства. Но теперь, когда я пытаюсь, он показывает только одно:

$ wmctrl -d
0  * DG: 7208x1003  VP: 0,0  WA: 0,0 1802x976  Workspace 1

Список окон показывает, что все находятся на одном рабочем столе, но разнесены по ширине экрана:

$ wmctrl -lGx
0x02200003  0 0    1952 1802 27   gnome-panel.Gnome-panel  ned-vbox Bottom Expanded Edge Panel
0x0260001e  0 0    0    1802 1003 desktop_window.Nautilus  ned-vbox x-nautilus-desktop
0x04600004  0 332  140  1169 722  gnome-terminal.Gnome-terminal  ned-vbox Terminal
0x046000c6  0 116  288  1433 512  gnome-terminal.Gnome-terminal  ned-vbox Terminal
0x0480001e  0 388  48   1604 948  gvim.Gvim             ned-vbox .bashrc (~) - GVIM
0x04604c55  0 784  48   1214 948  gnome-terminal.Gnome-terminal  ned-vbox Terminal

Это Ubuntu 10.10, выполняющий компиляцию в виртуальном ящике (поэтому экран имеет ширину 1802 пикселя).

Почему мои рабочие области не видны в wmctrl? Они ведут себя правильно в графическом интерфейсе, все клавиши быстрого доступа работают так, как должны, и пункты меню для перемещения окон между рабочими пространствами прекрасны. Как мне получить wmctrl, чтобы показать мне, что я хочу? Есть ли другой способ получить информацию о рабочей области точно?


5
2018-03-30 01:59


происхождения




ответы:


Compiz реализует видовые экраны вместо рабочих столов. Вы можете рассчитать количество видовых экранов в зависимости от ширины рабочего стола:

$ wmctrl -d
0  * DG: 7680x1200  VP: 0,0  WA: 0,0 1920x1175  Workspace 1

Это говорит о том, что у меня есть четыре видовых экрана (7680/1920 = 4), и я сейчас ищу на первом. (К сожалению, я не вижу способа в wmctrl, чтобы надежно извлечь ширина окна просмотра, поскольку рабочая область будет уменьшаться, если у вас есть панель занимая пространство на ребре. Вы можете использовать жесткие номера или использовать xdpyinfo для поиска размеры пикселей вашего экрана.)

Чтобы переключиться на второй видовой экран:

$ wmctrl -o 1920,0

Если вы хотите разобрать этот материал в bash, вот пример:

$ dimensions=$(xdpyinfo | awk '$1=="dimensions:"{print $2}')
$ screen_width=${dimensions%x*}
$ info=( $(wmctrl -d | awk '{print $4, $6}') )
$ desktop_width=${info[0]%x*}
$ viewports=$(( desktop_width / screen_width ))
$ current_vp=$(( ${info[1]%,*} / screen_width ))

8
2018-03-30 16:17



Обратите внимание, что это предполагает, что видовые экраны должны располагаться только горизонтально. В случае компоновки 2x2 (по умолчанию Unity) необходимо также учитывать высоту экрана (screen_height=${dimensions#*x}). - blueyed