如何最小化低级别的X窗口(不是wmctrl或xdotool)?

时间:2015-02-25 19:57:05

标签: x11

默认情况下,在现代操作系统(如Ubuntu)上安装了一些X工具。根据{{​​1}}页面,manxpropxdpyinfoxwininfoxdriinfoglxinfo

例如,似乎我可以设置:

nvinfo

这里xprop -id $id -f _NET_WM_STATE 32a -set _NET_WM_STATE "_NET_WM_ACTION_MINIMIZE" 根据手册对应"原子"属性。

但是,这似乎不起作用。我可能只设置了一个属性并且实际上没有更新吗?在这种情况下,我该如何执行后者呢?

一个更完整的脚本,以便您可以自己测试,假设我们已经使用a标志启动了chrome,并希望稍后将其最小化:

-maximized

也许我应该使用与#!/bin/bash search=chrome filter=maximized findpid=$(ps aux | grep $search | grep $filter | tr -s ' ' ' ' | cut -f2 -d' ') # pick only one pid findpid=$(echo $findpid | cut -f1 -d' ') echo "Search for window with pid=$findpid" known_windows=$(xwininfo -root -children|sed -e 's/^ *//'|grep -E "^0x"|awk '{ print $1 }') for id in ${known_windows} do xp=$(xprop -id $id _NET_WM_PID) if test $? -eq 0; then pid=$(xprop -id $id _NET_WM_PID|cut -d'=' -f2|tr -d ' ') if test "x${pid}" = x${findpid} then echo "Windows Id: $id" xprop -id $id xprop -id $id -f _NET_WM_STATE 32a -set _NET_WM_STATE "_NET_WM_ACTION_MINIMIZE" fi fi done 不同的内容,但xprop等似乎不会出现在各个窗口本身的层面上。

1 个答案:

答案 0 :(得分:2)

_NET_WM_ACTION_MINIMIZE是一个原子,用于在窗口支持的操作列表中指示“可以最大化”标志。要请求操作,您将_NET_WM_STATE客户端消息发送到 root 窗口,符合emwh标准的WM会为您执行操作,请参阅http://standards.freedesktop.org/wm-spec/wm-spec-1.3.html#idm140130317598336

要取消最大化,请将_NET_WM_STATE_REMOVE设置为操作,并将_NET_WM_STATE_MAXIMIZED_VERT作为第一个属性发送消息,将_NET_WM_STATE_MAXIMIZED_HORIZ作为第二个属性发送。