繁体   English   中英

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

[英]How can I query the number of the virtual desktop on which the bash script is running in Linux Mint via bash?

环境:

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.

使用awk (恕我直言仍然是手头任务最合适的选择):

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

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

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

遵循需要 awk 的解决方案:

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

echo $nr_of_active_workspace

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

您可以使用 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 模式匹配参数扩展来匹配以空格结尾的最长的 substring,并将其删除,只留下最后一个标记 (等号后的值)。

请注意,桌面从 0(零)开始编号,因此计数将比最后一个桌面的 ID 号大 1。

这应该适用于任何遵守扩展 Window 管理器提示 (EWMH) 规范的 window 管理器(这些天实际上是所有这些规范):

https://specifications.freedesktop.org/wm-spec/1.3/ar01s03.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM