如何通过bash查询Linux Mint中运行bash脚本的虚拟桌面的编号?

1szpjjfi  于 2022-12-11  发布在  Linux
关注(0)|答案(4)|浏览(205)

使用环境:

Linux Mint, Cinnamon desktop manager, with multiple workspaces=virtual desktops, e.g. 4.
Bash script

已知:

How to determine the number of workspaces:

wmctrl -d | wc -l

我需要:

Get the number of virtual desktops the bash script is running on with a pure bash as var (like with grep, not awk or similar) and echo the var.
yquaqz18

yquaqz181#

使用awk(imho仍然是当前任务的最合适选择):

nr_of_active_workspace=$(wmctrl -d | awk '/\*/{print $NF}')
echo $nr_of_active_workspace

或者pure bash解决方案:

nr_of_active_workspace=$(wmctrl -d | while read -r line; do [[ $line =~ '*' ]] && echo ${line: -1} ; done)
echo $nr_of_active_workspace
whlutmcx

whlutmcx2#

您可以使用POSIX shell功能和xprop(1)命令来获取这两个详细信息,而无需其他外部实用程序。
要获取当前/活动桌面的ID号:

curdesk=$(xprop -root -notype _NET_CURRENT_DESKTOP)
curdesk="${curdesk##* }"

要获取定义的台式机计数/数量,请执行以下操作:

deskcnt=$(xprop -root -notype _NET_NUMBER_OF_DESKTOPS)
deskcnt="${deskcnt##* }"

两者都依赖于xprop(1)以“foo = 0“(用空格分隔)的形式给出答案,并使用shell模式匹配参数扩展来匹配以空格结尾的最长子字符串,并删除它,只留下最后一个标记(等号后面的值)。
请注意,桌面平台是从0(零)开始编号,因此计数会比最后一个桌面平台的ID号码大1。
这应该适用于任何遵循扩展窗口管理器提示(EWMH)规范的窗口管理器(目前几乎所有的窗口管理器都遵循EWMH规范):
https://specifications.freedesktop.org/wm-spec/1.3/ar01s03.html

y4ekin9u

y4ekin9u3#

遵循需要awk的解决方案:

nr_of_active_workspace=$(wmctrl -d | grep "*" | awk '{print $11}')

echo $nr_of_active_workspace

它可以是一个不需要awk的解决方案,也可以是其他方式。

e5nqia27

e5nqia274#

根据KamilCuk的回答,可以按照以下方式输出包含活动桌面编号的行:

nr_of_active_desktop=activedesktop=$(wmctrl -d | grep "*" | rev | cut -d ' ' -f1)
echo $nr_of_active_desktop

相关问题