Foxlair

wine程序的全局快捷键设置,以微信为例

· q8f13

问题

wine环境目前已经很完善了,配合arch的AUR使用起来非常方便。但自己在win环境下早已习惯的" ctrl+alt+w 呼出微信窗口 + 不用的时候直接关闭不占用桌面空间”并没有继承到linux环境下来

经查找到了一篇设置文章 使用deepin-Wine在ubuntu下安装QQ,TIM,微信等软件,以及deepin-wine的快捷键设置,似乎是解决了这个问题

但在使用过程中发现,经过这种方法呼出窗口的动作,会有0.5-0.8秒的延迟。既然都用上快捷键了,这么不跟手属实难受的很

继续查找解决方案,又找到一篇 How To Bind Global HotKeys to a WINE Program under Linux。这个方法几乎感觉不到延迟,遂记录在这里以供参考

思路

通过使用xdotool将全局快捷键映射给对应的进程

解决

首先确保xdotool正常安装。各包管理器均有

    Debian and Ubuntu: apt-get install xdotool
    Fedora: dnf install xdotool
    FreeBSD: pkg install xdotool
    macOS: brew install xdotool or sudo port install xdotool
    OpenSUSE: zypper install xdotool
    Archlinux: pacman -S xdotool

利用xdotool获取目标进程并将快捷键转发过去,这里以微信(WeChat.exe)为例

#/bin/bash
xdotool key --window $( xdotool search --limit 1 --all --pid $( pgrep WeChat.exe ) --name WeChat ) "ctrl+alt+w"

保存脚本到某位置,待用

根据桌面环境不同,后面的设置方式有所不同。

以xfce4为例

通过xfce4的键盘选项(Settings - Keyboard)设置快捷键

Screenshot_2022-01-16_15-43-04.png

以bspwm + sxhkd为例

添加快捷键到sxhkd(~/.config/sxhkd/sxhkdrc)

# wechat
ctrl + alt + w
    /home/dust/my_scripts/wechat_wine_active.sh

后续

使用这套方案而没有用deepinwine的现成脚本,主要是图快,没延迟。在需要映射大量快捷键的时候就显得笨拙了。不过可以从脚本的思路入手,将脚本中要获取的进程名,快捷键键位等做成脚本本身的可用参数。即可实现灵活使用和低延迟兼得

#linux   #微信   #wine   #shortcut   #xdotool   #快捷键