考虑菜单栏和启动器使用的空间后获取可用的屏幕尺寸

考虑菜单栏和启动器使用的空间后获取可用的屏幕尺寸

我使用的是 Ubuntu 14.04。我知道如何使用 xrandr 或 xdpyinfo 获取屏幕分辨率。但通过这些工具,我获得了最大可用桌面尺寸......

我的顶部有一个菜单栏,可以使用一些可用的桌面。我的左侧有一个启动器,它占用了一些可用的桌面。如何使用 bash 脚本找到实际可用的桌面大小,该脚本说明了菜单栏和启动器所使用的空间?

答案1

解决方案

由于使用 指定了问题bash,因此有一种简洁的方法可以做到这一点:

IFS=', =' read -a area < <(xprop -root '_NET_WORKAREA')

用法

Xy坐标,宽度, 和高度都在区域大批。然后你可以像这样使用它们:

echo "Top left of usable space: X is ${area[1]} and Y is ${area[2]}"
echo "Width is ${area[3]} and height is ${area[4]}"

普通 Bourne 外壳

如果您仅限于普通 Bourne shell,则可以通过命名变量来解决缺少数组的问题X,y,w, 和H:

xprop -root _NET_WORKAREA > /tmp/workarea$$
IFS=, read x y w h sluff < /tmp/workarea$$
x=${x#*=}
rm /tmp/workarea$$

更多信息

要了解 X11 属性,例如_NET_工作区,请参阅扩展窗口管理器提示规范位于 freedesktop.org。

答案2

我发现获取宽度和高度的最可靠方法是:

#!/bin/bash

WINDOW_ID=$(wmctrl -a :ACTIVE: -v 2>&1 | grep -Eo "0x[0-9a-f]{8}")

wmctrl -ir $WINDOW_ID -b add,maximized_vert,maximized_horz

sleep 1

echo Width is $(wmctrl -lG | grep $WINDOW_ID | awk -v N=5 '{print $N}')
echo Height is $(wmctrl -lG | grep $WINDOW_ID | awk -v N=6 '{print $N}')
wmctrl -ir $WINDOW_ID -b remove,maximized_vert,maximized_horz

您必须小心 的值sleep,它可能会有所不同。

答案3

经过多次搜索,我找到了 xprop 命令,它返回我正在寻找的信息。

available_screen=$(xprop -root | grep -e 'NET_WORKAREA(CARDINAL)') #get available screen dimensions
    available_screen=${available_screen##*=} #strip off beginning text
    current_screen_width=$(echo $available_screen | cut -d ',' -f3 | sed -e 's/^[ \t]*//')
    current_screen_height=$(echo $available_screen | cut -d ',' -f4 | sed -e 's/^[ \t]*//')

相关内容