Gnome(Ubuntu)中如何通过脚本将指定gnome-terminal窗口置于后台?
把特定gnome-terminal窗口放到其他终端窗口之后的解决方案
我之前做演示动画时也碰到过类似的需求,xdotool确实没有直接的“置后于特定窗口群”的选项,但我们可以通过窗口层级调整或者反向置顶其他窗口的方式实现目标,下面给你两个靠谱的方案:
方案一:通过xdotool反向置顶其他终端窗口
这个思路很直接:先找到你最后打开的那个特定终端窗口,然后把之前打开的所有终端窗口逐个置顶,这样目标窗口自然就跑到它们后面了。
完整脚本示例
#!/bin/bash # 1. 先打开若干普通终端窗口 gnome-terminal & gnome-terminal & gnome-terminal & # 2. 打开执行特定命令的终端,记录它的PID gnome-terminal --command="echo '演示专用窗口'; sleep 20" & TARGET_PID=$! # 3. 等待目标窗口创建完成(避免找不到窗口ID) TARGET_WINDOW="" while [ -z "$TARGET_WINDOW" ]; do sleep 0.5 TARGET_WINDOW=$(xdotool search --pid $TARGET_PID) done # 4. 获取所有其他gnome-terminal的窗口ID(排除目标窗口) ALL_OTHER_TERMINALS=$(xdotool search --class gnome-terminal | grep -v "$TARGET_WINDOW") # 5. 逐个置顶其他终端窗口,把目标窗口挤到后面 for win_id in $ALL_OTHER_TERMINALS; do xdotool windowraise "$win_id" done
方案二:用wmctrl直接将目标窗口设为终端层级的底层
wmctrl是另一个窗口管理工具,它可以直接给窗口添加below属性,不过要注意:这个属性会让窗口跑到所有窗口的底层,如果你希望它只在终端窗口后面,建议配合筛选操作。
脚本示例
#!/bin/bash # 前两步和方案一一致 gnome-terminal & gnome-terminal & gnome-terminal & gnome-terminal --command="echo '演示专用窗口'; sleep 20" & TARGET_PID=$! # 等待窗口创建 TARGET_WINDOW="" while [ -z "$TARGET_WINDOW" ]; do sleep 0.5 TARGET_WINDOW=$(xdotool search --pid $TARGET_PID) done # 先移除窗口的"above"属性(如果有的话),再添加"below"属性 wmctrl -r "$TARGET_WINDOW" -b remove,above wmctrl -r "$TARGET_WINDOW" -b add,below # 如果你只想让它在其他终端后面,而非所有窗口,可以先把其他终端置顶一遍(同方案一的步骤4、5)
注意事项
- 先确保安装了所需工具:在Debian/Ubuntu系可以用
sudo apt install xdotool wmctrl安装 - 等待窗口创建的循环很重要,因为终端窗口启动需要一点时间,直接找ID会失败
- 如果你的终端有自定义类名(不是默认的
gnome-terminal),需要修改xdotool search --class后面的参数,用xdotool getactivewindow getwindowclassname可以查看当前窗口的类名
内容的提问来源于stack exchange,提问作者spacecodeur
相关产品推荐
相关产品推荐

