首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过bash命令/文件从Xmonad获取当前工作区信息?

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

Stack Overflow用户
提问于 2021-05-22 13:26:05
回答 1查看 429关注 0票数 1

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

我搜索了网络,似乎dynamicLog就是其中之一。但我无法弄清楚如何将Xmonad的信息准确地发送到文件中。我要做的是,每当Xmonad发生更改时,让Xmonad使用当前工作区信息更新某个文件。

这可以通过DynamicLogger完成吗?

我现在的Xmonad dynamicLog部分如下:

代码语言:javascript
复制
   , logHook            = dynamicLogWithPP 
                           xmobarPP
                           { ppOutput = hPutStrLn xmproc
                           , ppTitle = xmobarColor "darkgreen" "" . shorten 100
                           }

或者,看看网络上的另一种方法,我尝试了这样的方法

代码语言:javascript
复制
.
.
.
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,但它没有工作。它的输出就像-

代码语言:javascript
复制
$ wmctrl -d
Cannot get number of desktops properties. (_NET_NUMBER_OF_DESKTOPS or _WIN_WORKSPACE_COUNT)

如对上述任何事项有任何帮助,我们将不胜感激。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2022-06-10 14:55:05

道具实用程序可能就是您要找的东西。据我所知,它适用于每个窗口管理器,包括XMonad。它提供了关于桌面、窗口和X11上其他一些东西的信息。下面是它在我的系统上的输出示例:

代码语言:javascript
复制
$ 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"

还可以指定要获得哪些属性:

代码语言:javascript
复制
$ 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对于找出哪些桌面正在被占用是有用的:

代码语言:javascript
复制
$ xprop -id 0x1e0002c _NET_WM_DESKTOP
_NET_WM_DESKTOP(CARDINAL) = 1

手册页包含一些更有用的标志,所以请确保检查它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67650026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档