linux查看正在运行的窗口,获取linux中打开的应用程序窗口的数量

我想检测由窗口管理器管理的特定应用程序的实例数量.目前,我有这个:

#!/bin/bash

# wmctrl required

pids=$(pidof $1)

IFS=' ' read -a pid_arr <<< "$pids"

matches=0

for pid in "${pid_arr[@]}"

do

matching_lines=$(wmctrl -l -p | egrep -c "^.+\b.+\b$pid\b")

matches=$((matches + $matching_lines))

done

echo $matches

假设我有三次打开firefox并且我将firefox作为参数传递,如果没有打开“子窗口”(例如首选项窗口),该函数将只返回正确的数字.否则,该函数也将计算这些窗口.

我想获得没有“子窗口”的窗口数量.

P.S.:做了一些改变.要计算没有对话窗口的窗口数,这是我目前的解决方案:

#!/bin/bash

pids=$(pidof $1)

IFS=' ' read -r -a pid_arr <<< "$pids"

matches=0

for pid in "${pid_arr[@]}"

do

ids=$(wmctrl -l -p | awk '$3=='$pid'{printf $1" "}')

IFS=' ' read -r -a id_arr <<< "$ids"

for id in "${id_arr[@]}"

do

if ! xprop -id "$id" |

egrep -q '(WM_TRANSIENT_FOR|_NET_WM_WINDOW_TYPE_DIALOG)'

then

((matches++))

fi

done

done

echo $matches

但是在firefox的情况下,脚本无法区分浏览器窗口及其首选项窗口,因为它们都不是对话框窗口.

上面的脚本对我来说已经足够了,因为我用它来弄清楚xfce4-appfinder有多少个窗口(没有对话窗口).对于xfce4-appfinder,脚本可以正常工作,因为它的首选项窗口很容易被识别为对话框窗口.在firefox中,甚至可以通过调用firefox -preferences独立打开首选项窗口.将这样的窗口识别为某种“子窗口”可能是不可能的.

以下是我对firefox的浏览器和首选项窗口的xprop和xwininfo的结果:

xwininfo(浏览器):

xwininfo: Window id: 0x1c0007f "bash - Get number of opened application windows in linux - Stack Overflow - Mozilla Firefox"

Root window id: 0xa1 (the root window) (has no name)

Parent window id: 0x1400048 (has no name)

1 child:

0x1c00080 (has no name): () 1x1+-1+-1 +1+37

Absolute upper-left X: 2

Absolute upper-left Y: 38

Relative upper-left X: 0

Relative upper-left Y: 14

Width: 956

Height: 511

Depth: 24

Visual: 0x20

Visual Class: TrueColor

Border width: 0

Class: InputOutput

Colormap: 0x22 (installed)

Bit Gravity State: NorthWestGravity

Window Gravity State: NorthWestGravity

Backing Store State: NotUseful

Save Under State: no

Map State: IsViewable

Override Redirect State: no

Corners: +2+38 -962+38 -962-531 +2-531

-geometry 956x511+0+22

Bit gravity: NorthWestGravity

Window gravity: NorthWestGravity

Backing-store hint: NotUseful

Backing-planes to be preserved: 0xffffffff

Backing pixel: 0

Save-unders: No

Someone wants these events:

KeyPress

KeyRelease

ButtonPress

ButtonRelease

EnterWindow

LeaveWindow

PointerMotion

Exposure

VisibilityChange

StructureNotify

FocusChange

PropertyChange

Do not propagate these events:

Override redirection?: No

Window manager hints:

Client accepts input or input focus: Yes

Initial state is Normal State

Displayed on desktop 0

Window type:

Normal

Process id: 792 on host T530

Normal window size hints:

Program supplied minimum size: 300 by 71

Program supplied maximum size: 32767 by 32767

Program supplied window gravity: NorthWestGravity

No zoom window size hints defined

No window shape defined

No border shape defined

xwininfo(首选项):

xwininfo: Window id: 0x1c046ef "Firefox Preferences"

Root window id: 0xa1 (the root window) (has no name)

Parent window id: 0x1400060 (has no name)

1 child:

0x1c046f0 (has no name): () 1x1+-1+-1 +961+37

Absolute upper-left X: 962

Absolute upper-left Y: 38

Relative upper-left X: 0

Relative upper-left Y: 14

Width: 956

Height: 1040

Depth: 24

Visual: 0x20

Visual Class: TrueColor

Border width: 0

Class: InputOutput

Colormap: 0x22 (installed)

Bit Gravity State: NorthWestGravity

Window Gravity State: NorthWestGravity

Backing Store State: NotUseful

Save Under State: no0x1c00001

Map State: IsViewable

Override Redirect State: no

Corners: +962+38 -2+38 -2-2 +962-2

-geometry 956x1040-0-0

Bit gravity: NorthWestGravity

Window gravity: NorthWestGravity

Backing-store hint: NotUseful

Backing-planes to be preserved: 0xffffffff

Backing pixel: 0

Save-unders: No

Someone wants these events:

KeyPress

KeyRelease

ButtonPress

ButtonRelease

EnterWindow

LeaveWindow

PointerMotion

Exposure

VisibilityChange

StructureNotify

FocusChange

PropertyChange

Do not propagate these events:

Override redirection?: No

Window manager hints:

Client accepts input or input focus: Yes

Initial state is Normal State

Displayed on desktop 0

Window type:

Normal

Process id: 792 on host T530

Normal window size hints:

Program supplied location: 0, 0

Program supplied minimum size: 604 by 594

Program supplied maximum size: 32767 by 32767

Program supplied window gravity: NorthWestGravity

No zoom window size hints defined

No window shape defined

No border shape defined

xprop(浏览器):

_DESKTOP(CARDINAL) = 0

WM_STATE(WM_STATE):

window state: Normal

icon window: 0x0

WM_HINTS(WM_HINTS):

Client accepts input or input focus: True

Initial state is Normal State.

bitmap id # to use for icon: 0x1c00082

bitmap id # of mask for icon: 0x1c00083

window id # of group leader: 0x1c00001

_NET_STARTUP_ID(UTF8_STRING) = "xfce4-appfinder/|usr|lib|firefox|firefox/756-0-T530_TIME21351"

WM_WINDOW_ROLE(STRING) = "browser"

XdndAware(ATOM) = BITMAP

_MOTIF_DRAG_RECEIVER_INFO(_MOTIF_DRAG_RECEIVER_INFO) = 0x6c, 0x0, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0

_NET_WM_SYNC_REQUEST_COUNTER(CARDINAL) = 29360257

_NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_NORMAL

_NET_WM_USER_TIME(CARDINAL) = 1758669

_NET_WM_USER_TIME_WINDOW(WINDOW): window id # 0x1c00080

WM_CLIENT_LEADER(WINDOW): window id # 0x1c00001

_NET_WM_PID(CARDINAL) = 792

WM_LOCALE_NAME(STRING) = "en_US.UTF-8"

WM_CLIENT_MACHINE(STRING) = "T530"

WM_NORMAL_HINTS(WM_SIZE_HINTS):

program specified minimum size: 300 by 71

program specified maximum size: 32767 by 32767

window gravity: NorthWest

WM_PROTOCOLS(ATOM): protocols WM_DELETE_WINDOW, WM_TAKE_FOCUS, _NET_WM_PING, _NET_WM_SYNC_REQUEST

WM_CLASS(STRING) = "Navigator", "Firefox"

WM_ICON_NAME(STRING) = "bash - Get number of opened application windows in linux - Stack Overflow - Mozilla Firefox"

_NET_WM_ICON_NAME(UTF8_STRING) = "bash - Get number of opened application windows in linux - Stack Overflow - Mozilla Firefox"

WM_NAME(STRING) = "bash - Get number of opened application windows in linux - Stack Overflow - Mozilla Firefox"

_NET_WM_NAME(UTF8_STRING) = "bash - Get number of opened application windows in linux - Stack Overflow - Mozilla Firefox"

xprop(首选项)

_NET_WM_DESKTOP(CARDINAL) = 0

WM_STATE(WM_STATE):

window state: Normal

icon window: 0x0

WM_HINTS(WM_HINTS):

Client accepts input or input focus: True

Initial state is Normal State.

bitmap id # to use for icon: 0x1c046f2

bitmap id # of mask for icon: 0x1c046f3

window id # of group leader: 0x1c00001

WM_WINDOW_ROLE(STRING) = "Preferences"

XdndAware(ATOM) = BITMAP

_MOTIF_DRAG_RECEIVER_INFO(_MOTIF_DRAG_RECEIVER_INFO) = 0x6c, 0x0, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0

_NET_WM_SYNC_REQUEST_COUNTER(CARDINAL) = 29378289

_NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_NORMAL

_NET_WM_USER_TIME(CARDINAL) = 1456410

_NET_WM_USER_TIME_WINDOW(WINDOW): window id # 0x1c046f0

WM_CLIENT_LEADER(WINDOW): window id # 0x1c00001

_NET_WM_PID(CARDINAL) = 792

WM_LOCALE_NAME(STRING) = "en_US.UTF-8"

WM_CLIENT_MACHINE(STRING) = "T530"

WM_NORMAL_HINTS(WM_SIZE_HINTS):

program specified location: 0, 0

program specified minimum size: 604 by 594

program specified maximum size: 32767 by 32767

window gravity: NorthWest

WM_PROTOCOLS(ATOM): protocols WM_DELETE_WINDOW, WM_TAKE_FOCUS, _NET_WM_PING, _NET_WM_SYNC_REQUEST

WM_CLASS(STRING) = "Browser", "Firefox"

WM_ICON_NAME(STRING) = "Firefox Preferences"

_NET_WM_ICON_NAME(UTF8_STRING) = "Firefox Preferences"

WM_NAME(STRING) = "Firefox Preferences"

_NET_WM_NAME(UTF8_STRING) = "Firefox Preferences"

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值