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

Ned*_*der 5 compiz ubuntu 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
Run Code Online (Sandbox Code Playgroud)

列出窗口显示所有窗口都在同一个桌面上,但间隔屏幕宽度:

$ 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
Run Code Online (Sandbox Code Playgroud)

这是在虚拟框中运行 compiz 的 Ubuntu 10.10(这就是屏幕宽度为 1802 像素的原因)。

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

小智 8

Compiz 实现视口而不是桌面。您可以根据桌面的宽度计算视口的数量:

$ wmctrl -d
0  * DG: 7680x1200  VP: 0,0  WA: 0,0 1920x1175  Workspace 1
Run Code Online (Sandbox Code Playgroud)

这表示我有四个视口 (7680 / 1920 = 4),我目前正在查看第一个。(不幸的是,我在 wmctrl 中没有看到可靠获取视口宽度的方法,因为如果面板在边缘占用空间,工作区域会缩小。您可以使用硬数字或使用 xdpyinfo 来查找像素尺寸你的屏幕。)

切换到第二个视口:

$ wmctrl -o 1920,0
Run Code Online (Sandbox Code Playgroud)

如果你想在 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 ))
Run Code Online (Sandbox Code Playgroud)