我需要来自Xmonad的关于当前工作区/屏幕的信息。我需要在bash脚本中外部使用它,这样我就可以根据我所在的当前工作区执行一些功能。
我搜索了网络,似乎dynamicLog就是其中之一。但我无法弄清楚如何将Xmonad的信息准确地发送到文件中。我要做的是,每当Xmonad发生更改时,让Xmonad使用当前工作区信息更新某个文件。
这可以通过DynamicLogger完成吗?
我现在的Xmonad dynamicLog部分如下:
, logHook = dynamicLogWithPP
xmobarPP
{ ppOutput = hPutStrLn xmproc
, ppTitle = xmobarColor "darkgreen" "" . shorten 100
}或者,看看网络上的另一种方法,我尝试了这样的方法
.
.
.
import XMonad.Hooks.SetWMName
import XMonad.Hooks.EwmhDesktops
import XMonad.Util.Cursor
myStartupHook = do
startupHook gnomeConfig
-- spawn "xcompmgr -cfC -t-9 -l-11 -r9 -D6 &"
setDefaultCursor xC_left_ptr <+> ewmhDesktopsStartup >> setWMName "Xmonad"
.
.
....to用于实用程序wmctrl,但它没有工作。它的输出就像-
$ wmctrl -d
Cannot get number of desktops properties. (_NET_NUMBER_OF_DESKTOPS or _WIN_WORKSPACE_COUNT)如对上述任何事项有任何帮助,我们将不胜感激。
谢谢
发布于 2022-06-10 14:55:05
道具实用程序可能就是您要找的东西。据我所知,它适用于每个窗口管理器,包括XMonad。它提供了关于桌面、窗口和X11上其他一些东西的信息。下面是它在我的系统上的输出示例:
$ xprop -root
_NET_DESKTOP_VIEWPORT(CARDINAL) = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
AT_SPI_BUS(STRING) = "unix:path=/run/user/1000/at-spi/bus_0,guid=1e117f5891f27107a4d3b3fe62a2c9d2"
ESETROOT_PMAP_ID(PIXMAP): pixmap id # 0xa00001
_XROOTPMAP_ID(PIXMAP): pixmap id # 0xa00001
_NET_SUPPORTING_WM_CHECK(WINDOW): window id # 0x400001
_NET_SUPPORTED(ATOM) = _NET_WM_STATE, _NET_WM_STATE_FULLSCREEN, _NET_SUPPORTING_WM_CHECK, _NET_WM_NAME, _NET_WM_STATE_HIDDEN, _NET_WM_STATE_DEMANDS_ATTENTION, _NET_NUMBER_OF_DESKTOPS, _NET_CLIENT_LIST, _NET_CLIENT_LIST_STACKING, _NET_CURRENT_DESKTOP, _NET_DESKTOP_NAMES, _NET_ACTIVE_WINDOW, _NET_WM_DESKTOP, _NET_WM_STRUT, _NET_DESKTOP_VIEWPORT
_NET_ACTIVE_WINDOW(WINDOW): window id # 0x220000f
_NET_CURRENT_DESKTOP(CARDINAL) = 2
_NET_CLIENT_LIST_STACKING(WINDOW): window id # 0xe00002, 0x1e0002c, 0x220000f
_NET_CLIENT_LIST(WINDOW): window id # 0xe00002, 0x1e0002c, 0x220000f
_NET_DESKTOP_NAMES(UTF8_STRING) = "1", "2", "3", "4", "5", "6", "7", "8", "9"
_NET_NUMBER_OF_DESKTOPS(CARDINAL) = 9
GDK_VISUALS(INTEGER) = 1757, 2175
_XKB_RULES_NAMES(STRING) = "evdev", "pc105", "us,ru", "qwerty", "grp:alt_shift_toggle"
XFree86_has_VT(INTEGER) = 1
XFree86_VT(INTEGER) = 7
Xorg_Seat(STRING) = "seat0"还可以指定要获得哪些属性:
$ xprop -root _NET_NUMBER_OF_DESKTOPS _NET_CLIENT_LIST _NET_ACTIVE_WINDOW _NET_CURRENT_DESKTOP
_NET_NUMBER_OF_DESKTOPS(CARDINAL) = 9
_NET_CLIENT_LIST(WINDOW): window id # 0xe00002, 0x1e0002c, 0x220000f
_NET_ACTIVE_WINDOW(WINDOW): window id # 0x220000f
_NET_CURRENT_DESKTOP(CARDINAL) = 2它对windows的行为也是一样的,您可能会发现windows对于找出哪些桌面正在被占用是有用的:
$ xprop -id 0x1e0002c _NET_WM_DESKTOP
_NET_WM_DESKTOP(CARDINAL) = 1手册页包含一些更有用的标志,所以请确保检查它。
https://stackoverflow.com/questions/67650026
复制相似问题