虽然有人推过了, 再来推荐一波xkeysnail, 功能更完善了一点

xkeysnail 是 mooz 大佬许久之前用python开发的一款软件 mooz/xkeysnail, 不过已经好久没有维护了, 我目前使用的是基于 Lenbok/xkeysnail , 的分支进行了两个小修改的版本 nlfiasel/xkeysnail , 优化了分应用设定的 multipurpose 的逻辑, 并添加了超时后按键取消的功能

自己用了一段时间了感觉挺好用, 分应用设定的 multipurpose 是 Lenbok 在原版的基础上添加的功能, 不过在实际使用中有一点问题, 我改了一下, 作者目前开了个新分支还在测试

目前是,可以対任意应用分别地定义按键映射, 比如说某个键在某些应用里是多功能的修饰键, 但是全局并不是, 估计功能上大致应该与 Karabiner Karabiner 这个软件十分接近了(因为没用过…不过应该是大部份的键位映射场景都已经覆盖到了)

附上我目前的键位映射文件, 安利给大家: 在这里

以及试用 ox-hugo 写的博客回忆的安装和设置: 在这里

PS: 对延迟要求高的按键不要轻易采用 xkeysnail 处理…比如我全局设置中的 enter, 建议注释掉

8 个赞

PSPS: mooz/xkeysnail 一周前合并了一年来攒下的pr…

其中也包含了一个多修饰键没法一块按的修复(比如virt-manager ctrl+alt释放? 看意思大概是这个意思…)

同时,经过几个月的使用…空格的按下当ctrl使,十分方便,安利给各位 :wink:

xkeysnail 是不是可以比较好的区分不同的设备进行不同的配置?

全局emacs映射,确实很方便。 最近遇到的问题就是,在vnc里面开启的远程桌面上无法开启,xinput能输出vnc virtual keyboard,但是没有对应的device

应该是能的…Lenbok有好几个pr是干的这个事…只不过我只用一个设备…

你用的gnome嘛…?如果是的话,试试kde…?

@nlfiasel 看了你的那个wmctrl 设置,推荐 jumpapp

年轻人真能折腾,这个不知道你感不感兴趣: 以前用EXWM,窗口排布可以用winner切换,现在被迫用openbox,想实现一个类似的功能, 这里有个参考脚本

要和窗口管理器深度整合估计要这个

在你的github提issue了,主意不好你随便处理哈 :wink:

窗口管理器我用的一个Kwin脚本 在这里 …感觉还挺好使得

1 个赞

看起来不错啊,我还在用 i3,不知道这个稳定吗?之前试过 kde 的另一个这样的脚本,感觉并不稳定。

大多数时候好使…就是改了桌面相关的系统设置(比如增加虚拟桌面)之后要手动去设置里把这个脚本开关一下…我一直在用,木有什么问题

像 i3 的话就是接显示器什么的,还要自己用 arandr 之类的调整很麻烦,感觉 kde 在这方面会好一些。这样听起来好像差不多。。

单纯添加或者去除显示器是没问题的…我这两个是正常使…

拔掉显示器之后按快捷键重新自动布局就行…我设置的mod+r

嗯 插拔确实不好使…

如果是固定的显示器和固定的摆放位置的话可以写脚本啊。

我目前是这样的,有一个笔记本和一个显示器,如果连接它们时,我会把笔记本竖着固定起来(贫穷使我我这样)看 PDF 之类的。

有两个 i3 的配置文件,一个用于笔记本屏幕,一个用于加显示器的。区别主要是一些绑定按键的区别和工作区的分配。

写的脚本思路大概是这样的:

  1. 判断显示器数量( xrandr | grep " connected " | wc -l )
  2. 如果是一个屏幕
    xrandr --output eDP-1 --mode 1920x1080 --pos 0x0 --rotate normal
    xrandr -auto
    ln -sf "$I3_CONFIG_1" $HOME/.config/i3/config

如果是两个屏幕

    xrandr --output eDP-1 --mode 1600x900 --pos 0x0 --rotate left --output HDMI-2 --mode 1920x1080 --pos 1000x0
    ln -sf "$I3_CONFIG_2" $HOME/.config/i3/config
  1. 重启 i3 (i3-msg restart)
  2. 重新设置壁纸

像 eDP-1 之类的好像在不同的显示器上是不同的,包括插不同的线也是。所以这个脚本只能用于一台设备啊。

我这 eDP-1 一直是笔记本屏幕啊,我现在就一个外置显示器,所以需求很简单,如果我设备变多的话,我肯定会考虑在扩充一下脚本的。

1 . 如果用的显示器比较固定,包括摆放位置固定,造成混乱的只有连接线、接口:

1.1 显示屏不一样大,xrandr 的结果有:

eDP-1 connected primary 900x1600+0+0 left (normal left inverted right x axis y axis) 344mm x 193mm

最后的这个实际尺寸可以拿来做做文章。

1.2 其他情况就找 EDID 来识别设备。

2 . 用的显示设备经常不同,摆放位置也不一样的话,我没考虑过,感觉无论用什么桌面/系统都得手动调一下吧。

@nlfiasel 请教下你是怎么设置开机自动启动的,我按照你推荐的这个方法操作,没法成功。 查看状态是报错退出。 手动执行的时候,是可以正常工作的。
系统: Arch Linux + KDE

● xkeysnail.service - xkeysnail
     Loaded: loaded (/home/aqua/.config/systemd/user/xkeysnail.service; enabled; vendor preset: enabled)
     Active: activating (auto-restart) (Result: exit-code) since Wed 2020-10-28 20:51:50 CST; 625ms ago
    Process: 4391 ExecStartPre=/usr/bin/xhost +SI:localuser:root (code=exited, status=0/SUCCESS)
    Process: 4392 ExecStart=/usr/bin/xkeysnail -q ~/.config/xkeysnail/config.py (code=exited, status=1/FAILURE)
   Main PID: 4392 (code=exited, status=1/FAILURE)

我参考另一个帖子设置成功了,这是配置文件

多谢。这个方法之前都试过了。还是没有用。
@Claude-Ray 今天重启后,发现用你的方法竟然成功了。 :smile: