之前老版本linux使用x11的可以使用这种,后来这些使用wayland的,可以看后半部分
准备工作
sudoaptinstallxdotool编写sh脚本
#!/bin/bash# 获取所有微信窗口的ID并存储在数组中wechat_windows=($(xdotool search-name'微信'))# 获取当前活动窗口的IDcurrent_window=$(xdotool getactivewindow)# 初始化标志,判断是否找到匹配的微信窗口found=0# 遍历微信窗口ID数组forwindow_idin"${wechat_windows[@]}"do# 如果当前窗口ID与微信窗口ID匹配if["$current_window"-eq"$window_id"];then# 设置标志为1,表示找到了匹配的微信窗口found=1breakfidone# 如果找到匹配的微信窗口if["$found"-eq1];then# 最小化该微信窗口xdotool windowminimize"$window_id"else# 否则激活微信窗口forwindow_idin"${wechat_windows[@]}"doxdotool windowactivate"$window_id"donefiexit0快捷键![]()
eg:
openWechat
bash /home/edwin/文档/PilgrimFiles/openWechat.sh
【更新:】由于ubuntu26lts这种默认使用wayland造成基于x11开发的linux原生微信,使用上述方法不能使用,提供以下解决办法(当前办法只能唤醒状态栏里的最小化微信,当微信窗口出现后,最小化还需要win+h这种通用最小化按键,以后如果有更好的解决方案,会同步发布,可以关注后续)
- 安装 wmctrl
这是一个非常小巧的窗口控制工具,在 Ubuntu 下直接安装:
sudoaptinstallwmctrl- 建立快捷键脚本 openWechat.sh
# 1. 检查微信是否在运行ifpgrep-x"wechat">/dev/null;then# 如果运行了,强行将微信窗口激活并推到最前台# 注:wechat 对应微信窗口的 Class 名wmctrl-x-awechatelse# 如果没运行,则冷启动/usr/bin/wechat %U&fi- 赋予执行权限并绑定快捷键
chmod+x openWechat.sh- 使用./openWechat.sh测试完毕后,设置快捷键
【注:】ubuntu26使用wayland可能安装deb包都失败或者打不开微信,所以…看看下文试试
如果你需要解决微信或者其他跨平台软件(如 Qt/Electron 应用)在 Ubuntu 纯 Wayland 或缺少 X11 组件的环境下报错缺少 libxcb-xxx 相关依赖的问题,可以一键安装以下这组最完整的 XCB 图形核心依赖包。
直接在终端复制并运行以下命令:
sudoaptupdate&&sudoaptinstall-y\libxcb-icccm4\libxcb-image0\libxcb-keysyms1\libxcb-render-util0\libxcb-xinerama0\libxcb-xinput0\libxcb-cursor0\libxcb-shape0\libxcb-xfixes0\libxkbcommon-x11-0同理QQ:
#!/bin/bash# 1. 确保系统安装了 wmctrlif!command-vwmctrl&>/dev/null;thensudoapt-getinstall-ywmctrl>/dev/null2>&1fi# 2. 检查 QQ 进程是否存在 (匹配 qq 或 linuxqq)ifpgrep-x"qq">/dev/null||pgrep-x"linuxqq">/dev/null;then# 3. 使用 wmctrl 寻找 QQ 的窗口# -l 列出所有窗口,-x 显示类名,-i 打印出十六进制窗口 ID# 微信/QQ 等软件类名大小写敏感,这里同时匹配 qq, QQ, linuxqqQQ_WINDOW_ID=$(wmctrl-lx|grep-i-E"qq|linuxqq"|awk'{print $1}'|head-n1)if[-n"$QQ_WINDOW_ID"];then# 4. 获取当前最前台(获得焦点)的窗口 ID(转换为十六进制小写格式,方便对比)ACTIVE_WINDOW_ID=$(printf"0x%08x"$(xdotool getactivewindow2>/dev/null)2>/dev/null)# 如果没有 xdotool,可以用 wmctrl 替代获取当前激活窗口(部分环境适用)[-z"$ACTIVE_WINDOW_ID"]&&ACTIVE_WINDOW_ID=$(wmctrl-v-a:ACTIVE:2>&1|grep"Active window"|awk'{print $NF}')# 场景 A:如果当前活动窗口就是 QQ,则将其最小化if["$ACTIVE_WINDOW_ID"="$QQ_WINDOW_ID"];then# -i 代表使用窗口 ID 操纵,-r 指定目标,:ACTIVE: 表示将其最小化/隐藏wmctrl-i-r"$QQ_WINDOW_ID"-badd,hidden# 场景 B:如果 QQ 窗口在后台,将其激活并推到最前台elsewmctrl-i-a"$QQ_WINDOW_ID"fielse# 场景 B 兜底:如果进程在,但 wmctrl 找不到窗口(比如缩进了托盘)# 此时直接运行 QQ 命令,利用 QQ 自身的单实例检测去唤醒托盘中的界面/usr/bin/qq %U&fi# 场景 C:如果 QQ 压根没运行,直接冷启动else/usr/bin/qq %U&fiexit0chmod+x ~/EdwinFiles/open_qq_wmctrl.sh