Linux下通过键盘快捷键在双屏幕之间切换焦点

在办公室一直在用synergy,在两台电脑之间共享鼠标键盘,而且配置了快捷键能方便的在两台电脑之间切换(文章一文章二文章三)。但是一直没有找到一个好方法能方便快捷的在双屏幕之间切换焦点,必须手离开键盘移动一下鼠标,很不爽……

针对这个问题以前也搜索过,但是没找到什么好方法。这两天不死心继续搜索,发现一个叫做dualscreen-mouse-utils的工具,但是在我的Fedora21系统上却工作不正常。那个mouse-switchscreen一直报错,我不懂X编程,无能为力了……

Opening display :0.0
Window ID is 360002e, focus is 1
Saving /home/eguan/.pointer-0
Moving to screen 1, x = 0, y = 0
X Error of failed request:  BadWindow (invalid Window parameter)
  Major opcode of failed request:  41 (X_WarpPointer)
  Resource id in failed request:  0x18
  Serial number of failed request:  9
  Current serial number in output stream:  12

继续不死心,man -k mouse了一下,看看能否发现模拟鼠标操作的工具,结果还真发现了一个,xdotool。看了一下manpage,很强大,能够通过命令行输入组合键,移动鼠标,点击鼠标,获取活动窗口,获取鼠标位置等等。于是想了一个不完美,但是能用的方法。

先把鼠标移动到主屏幕某个最大化的窗口的标题栏上,获取鼠标坐标,比如X=760 Y=32,同样把鼠标移动到次屏幕某个最大化的窗口的标题栏上,获取坐标,比如X=2450 Y=15,然后写这样一个脚本

$ cat ~/bin/switch-screen.sh 
#!/usr/bin/bash
if [ "$1" == "-l" ]; then
        xdotool mousemove 760 32
        xdotool click 1
elif [ "$1" == "-r" ]; then
        xdotool mousemove 2450 15
        xdotool click 1
else
        echo "Usage: $0 "
fi

于是用-l参数运行脚本的时候,xdotool把鼠标移动到主屏幕预设的位置,然后点一下鼠标左键,相当于移动鼠标过去并获取了焦点。用-r参数运行的时候同样,只不过移动到次屏幕上获取焦点。

这样做的缺点是,换了屏幕大小和位置这些坐标都得重新获取一个合适的值。不过对我现在来说够用了。接下来就是用xbindkeys配置键盘快捷键。

$ cat ~/.xbindkeysrc 
"$HOME/bin/switch-screen.sh -l"
  Control + 3

"$HOME/bin/switch-screen.sh -r"
  Control + 4
$ xbindkeys # run xbindkeys as daemon

这个配置就是说把ctrl+3绑定到把焦点移动到左边屏幕,ctrl+4绑定到把焦点移动到右边屏幕。到此,在两个电脑之间移动焦点和在两个屏幕之间移动焦点都能通过键盘来完成了,也早就把mutt/irssi扔到screen里,并通过guake呼来唤去,firefox有vimperator插件,这样使用鼠标的机会越来越少了。

Leave a Reply