wmctrl 说我有一个工作区,但实际上我有四个

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 在虚拟框中运行 compiz(这就是屏幕宽度为 1802 像素的原因)。

为什么我的工作区在 wmctrl 中不可见?它们在 GUI 中表现正常,所有快捷键都正常工作,在工作区之间移动窗口的菜单项也正常。如何让 wmctrl 显示我想要的内容?还有其他方法可以准确获取工作区信息吗?

答案1

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 ))

相关内容