wmctrl详解

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
  • 兼容性要求:窗口管理器需支持 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秒激活窗口)。
  • 工具整合
    • 与 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)确保窗口初始化完成。

示例场景

  1. 快速切换窗口(结合 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)。

  2. 最大化当前 Chrome 窗口

    bash

    wmctrl -r :ACTIVE: -b add,maximized_vert,maximized_horz
  3. 移动 Firefox 到第3桌面

    bash

    wmctrl -r "Firefox" -t 2  # 桌面从0开始计数

wmctrl 是 Linux 高效用户的必备工具,尤其适合需要脚本自动化或多任务管理的场景。掌握其核心命令与参数,结合脚本和工具整合,可显著提升桌面操作效率。

2.Ubuntu让Onboard键盘置顶全攻略

在Ubuntu系统中让Onboard虚拟键盘始终显示在最前面(置顶),可通过以下方法实现:

方法一:通过Onboard自身设置

  1. 打开Onboard首选项
    启动Onboard后,点击键盘右上角的齿轮图标(或右键点击键盘区域选择“首选项”)。
  2. 启用“强制置顶”选项
    在“窗口”或“行为”选项卡中:
    • 取消勾选“Dock to screen edge”(屏幕边缘停靠),使“Force window on top”(强制置顶)选项可用。
    • 勾选“Force window on top”后保存设置。
  3. 调整键盘位置
    将键盘拖动到屏幕底部或其他合适位置,避免遮挡内容。

方法二:使用窗口管理工具

若Onboard设置中无置顶选项,可通过命令行工具强制置顶:

  1. 安装wmctrl工具

    bash

    sudo apt install wmctrl
  2. 获取Onboard窗口ID
    执行命令:

    bash

    wmctrl -l | grep Onboard
    记录输出中的窗口ID(如0x123456)。
  3. 设置窗口置顶

    bash

    wmctrl -i -r 0x123456 -b add,above
    替换0x123456为实际窗口ID。

方法三:通过桌面环境设置(以GNOME为例)

  1. 使用GNOME扩展
    安装“Window Sticky”或“Always on Top”扩展(通过GNOME Extensions网站或Ubuntu Software),为Onboard窗口绑定置顶快捷键(如Ctrl+Super+T)。
  2. 手动置顶
    在GNOME中,右键点击Onboard窗口标题栏,选择“Always on Top”选项(需确保GNOME窗口管理器支持此功能)。

方法四:第三方工具辅助

  • Devilspie:创建规则文件(如~/.config/devilspie/onboard.ds),内容为:

    lua

    if (get_window_name() == "Onboard") then
        set_window_above();
    end
    启动Devilspie服务后,Onboard启动时自动置顶。
  • AutoHotkey(需适配Linux):通过脚本监听Onboard窗口并设置置顶属性。

注意事项

  • 桌面环境兼容性:不同桌面环境(如GNOME、XFCE、KDE)的窗口管理方式不同,需根据实际环境调整方法。
  • Wayland/X11差异:在Wayland下,部分窗口管理命令可能受限,需确认系统显示协议并选择适配方法。
  • Onboard版本:旧版Onboard可能无置顶选项,建议更新至最新版本。

通过上述任一方法,即可实现Onboard键盘始终置顶显示,避免被其他窗口遮挡。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值