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

2592
Ned Batchelder

Я пытаюсь создать один 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, запускающий compiz в виртуальной коробке (именно поэтому экран имеет ширину 1802 пикселя).

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

5

1 ответ на вопрос

8
Aron Griffis

Compiz implements viewports instead of desktops. You can calculate the number of viewports based on the width of the desktop:

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

This says that I have four viewports (7680 / 1920 = 4) and I'm currently looking at the first one. (Unfortunately I don't see a way in wmctrl to reliably fetch the width of a viewport becuase the working area will shrink if you have a panel taking space on an edge. You can either use hard numbers or use xdpyinfo to find the pixel dimensions of your screen.)

To switch to the second viewport:

$ wmctrl -o 1920,0 

If you're wanting to parse this stuff in bash, here's an example:

$ dimensions=$(xdpyinfo | awk '$1=="dimensions:"') $ screen_width=$ $ info=( $(wmctrl -d | awk '') ) $ desktop_width=$ $ viewports=$(( desktop_width / screen_width )) $ current_vp=$(( $ / screen_width )) 
Обратите внимание, что при этом видовые окна располагаются только горизонтально. В случае макета 2x2 (по умолчанию в Unity) необходимо учитывать и высоту экрана (`screen_height = $ `). blueyed 10 лет назад 0

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