如何通过bash命令/文件从Xmonad获取当前工作区信息



我需要Xmonad中关于当前工作区/屏幕的信息。我需要它在bash脚本的外部,这样我就可以根据我所在的当前工作区执行一些功能

我在网上搜索了一下,看起来dynamicLog就是其中一种方法。但我不知道如何将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"
.
.
.

用于实用程序wmctrl,但它不起作用。它的输出就像

$ wmctrl -d
Cannot get number of desktops properties. (_NET_NUMBER_OF_DESKTOPS or _WIN_WORKSPACE_COUNT)

如有任何上述方面的帮助,我们将不胜感激。

感谢

xprop实用程序可能就是您想要的。据我所知,它适用于每一个窗口管理器,包括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

它的行为与窗口相同,您可能会发现窗口有助于查明哪些桌面被占用:

$ xprop -id 0x1e0002c _NET_WM_DESKTOP
_NET_WM_DESKTOP(CARDINAL) = 1

xprop的手册页面包含一些更有用的标志,所以一定要检查它。

相关内容

  • 没有找到相关文章

最新更新