1.wmctrl详解
wmctrl 是一款强大的 Linux 命令行工具,用于与遵循 EWMH/NetWM 标准 的 X Window 管理器交互,支持窗口控制、工作区管理、状态调整等操作。以下从核心功能、安装配置、常用命令、高级用法、常见问题五个维度进行详解:
一、核心功能
- 窗口管理:列出/切换/移动/调整窗口大小、修改状态(最大化、最小化、全屏)、关闭窗口、设置标题。
- 工作区管理:列出所有桌面、切换工作区、移动窗口到指定桌面。
- 系统交互:查询窗口管理器信息、控制“显示桌面”模式、发送客户消息。
- 自动化支持:通过脚本(如 Bash、Python)或工具(如 rofi)整合,实现复杂任务自动化。
二、安装与兼容性
- 安装命令(按发行版):
- Ubuntu/Debian:
sudo apt-get install wmctrl - Fedora:
sudo dnf install wmctrl - Arch Linux:
sudo pacman -S wmctrl
- Ubuntu/Debian:
- 兼容性要求:窗口管理器需支持 EWMH/NetWM 标准(如 Metacity、Compiz、i3、Openbox 等)。若管理器未实现标准,部分功能可能失效。
三、常用命令与参数
| 命令示例 | 功能说明 |
|---|---|
wmctrl -l | 列出所有窗口(窗口ID、桌面号、机器名、标题) |
wmctrl -d | 列出所有桌面,当前桌面标记星号 |
wmctrl -s 2 | 切换到第2个桌面 |
wmctrl -a "Firefox" | 激活标题包含“Firefox”的窗口(自动切换到其所在桌面) |
wmctrl -c :SELECT: | 交互式选择窗口并关闭 |
wmctrl -r :ACTIVE: -e 0,100,100,800,600 | 将当前活动窗口移动到坐标(100,100),调整大小为800x600 |
wmctrl -r :ACTIVE: -b toggle,maximized_vert,maximized_horz | 最大化/恢复当前活动窗口 |
wmctrl -k on | 启用“显示桌面”模式 |
wmctrl -m | 显示窗口管理器信息(如名称、版本、桌面数量) |
四、高级用法
- 精确匹配与过滤:
- 使用
-F强制精确匹配窗口标题(如wmctrl -F -a "Firefox")。 - 结合
grep过滤窗口列表(如wmctrl -l | grep "Terminal")。
- 使用
- 脚本自动化:
- 在 Python 中调用
subprocess.run(["wmctrl", "-a", "PyCharm"])激活窗口。 - 使用
QTimer延迟执行命令,确保窗口已创建(如 Qt 应用中延迟1秒激活窗口)。
- 在 Python 中调用
- 工具整合:
- 与 rofi 集成实现图形化窗口切换器(示例脚本见下文)。
- 结合 xdotool 模拟键盘/鼠标操作,扩展自动化能力。
五、常见问题与解决
- 权限问题:确保用户有执行权限,必要时使用
sudo或加入input组(Ubuntu:sudo usermod -a -G input $USER)。 - 窗口管理器兼容性:若功能失效,检查管理器是否支持 EWMH 标准(如
wmctrl -m输出中确认兼容性)。 - 标题匹配失败:使用
-x参数匹配窗口类名(如wmctrl -x -a "Google-chrome"),或通过wmctrl -l确认准确标题。 - 操作延迟:在脚本中添加延迟(如
sleep 0.5)确保窗口初始化完成。
示例场景
-
快速切换窗口(结合 rofi):
bash# 创建窗口切换脚本 ~/.config/rofi/window_switcher.sh windows=$(wmctrl -l | awk '{print $1 " " $NF}') selected=$(echo "$windows" | rofi -dmenu -p "切换窗口") window_id=$(echo "$selected" | awk '{print $1}') wmctrl -i -a "$window_id"配置快捷键(如 i3wm:
bindsym $mod+w exec ~/.config/rofi/window_switcher.sh)。 -
最大化当前 Chrome 窗口:
bashwmctrl -r :ACTIVE: -b add,maximized_vert,maximized_horz -
移动 Firefox 到第3桌面:
bashwmctrl -r "Firefox" -t 2 # 桌面从0开始计数
wmctrl 是 Linux 高效用户的必备工具,尤其适合需要脚本自动化或多任务管理的场景。掌握其核心命令与参数,结合脚本和工具整合,可显著提升桌面操作效率。
2.Ubuntu让Onboard键盘置顶全攻略
在Ubuntu系统中让Onboard虚拟键盘始终显示在最前面(置顶),可通过以下方法实现:
方法一:通过Onboard自身设置
- 打开Onboard首选项
启动Onboard后,点击键盘右上角的齿轮图标(或右键点击键盘区域选择“首选项”)。 - 启用“强制置顶”选项
在“窗口”或“行为”选项卡中:- 取消勾选“Dock to screen edge”(屏幕边缘停靠),使“Force window on top”(强制置顶)选项可用。
- 勾选“Force window on top”后保存设置。
- 调整键盘位置
将键盘拖动到屏幕底部或其他合适位置,避免遮挡内容。
方法二:使用窗口管理工具
若Onboard设置中无置顶选项,可通过命令行工具强制置顶:
- 安装
wmctrl工具bashsudo apt install wmctrl - 获取Onboard窗口ID
执行命令:bash
记录输出中的窗口ID(如wmctrl -l | grep Onboard0x123456)。 - 设置窗口置顶
bash
替换wmctrl -i -r 0x123456 -b add,above0x123456为实际窗口ID。
方法三:通过桌面环境设置(以GNOME为例)
- 使用GNOME扩展
安装“Window Sticky”或“Always on Top”扩展(通过GNOME Extensions网站或Ubuntu Software),为Onboard窗口绑定置顶快捷键(如Ctrl+Super+T)。 - 手动置顶
在GNOME中,右键点击Onboard窗口标题栏,选择“Always on Top”选项(需确保GNOME窗口管理器支持此功能)。
方法四:第三方工具辅助
- Devilspie:创建规则文件(如
~/.config/devilspie/onboard.ds),内容为:lua
启动Devilspie服务后,Onboard启动时自动置顶。if (get_window_name() == "Onboard") then set_window_above(); end - AutoHotkey(需适配Linux):通过脚本监听Onboard窗口并设置置顶属性。
注意事项
- 桌面环境兼容性:不同桌面环境(如GNOME、XFCE、KDE)的窗口管理方式不同,需根据实际环境调整方法。
- Wayland/X11差异:在Wayland下,部分窗口管理命令可能受限,需确认系统显示协议并选择适配方法。
- Onboard版本:旧版Onboard可能无置顶选项,建议更新至最新版本。
通过上述任一方法,即可实现Onboard键盘始终置顶显示,避免被其他窗口遮挡。
1311

被折叠的 条评论
为什么被折叠?



