推荐xkeysnail,全局的keysnail

设置麻烦了点,不过效果不错,linux下的xkeymacs呀。

3 个赞

前两天刚发现xkeysnail, 兴奋到不行. 但是遇到了一个问题: xkeysnail 运行 需要 sudo, root 权限. 如果能开机后自启动就完美了. 不知道楼主有没有比较完美的解决方案? (我的系统是 manjaro)

systemd的配置文件里的User项就可以指定执行的用户

是的. 我建了一个服务有来启动xkeysnail, 我在服务里设置了user=root

这是我新建的服务

[Unit]
Description=xkeysnail

[Service]
User=root
CapabilityBoundingSet=~CAP_SYS_ADMIN
KillMode=process
ExecStart=/opt/xkeysnail/start-xkeysnail.sh
ExecStop=/usr/bin/killall xkeysnail
Restart=always
Environment=DISPLAY=:0.0

[Install]
WantedBy=graphical.target

这是我的脚本 start-xkeysnail.sh
#!/usr/bin/env bash
if [ -x /usr/bin/xkeysnail ]; then
sudo /usr/bin/xkeysnail /opt/xkeysnail/config.py
fi

脚本启动能够正常运行. start服务启动不了:sweat:
1 个赞

那你的服务报了什么错?

用markdown语法贴代码啊喂

1 个赞

非常感谢你的回复. 我查看服务状态的日志如下:

● xkeysnail.service - xkeysnail
   Loaded: loaded (/etc/systemd/system/xkeysnail.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Mon 2019-04-29 18:15:24 CST; 1s ago
  Process: 26524 ExecStart=/opt/xkeysnail/start-xkeysnail.sh (code=exited, status=1/FAILURE)
 Main PID: 26524 (code=exited, status=1/FAILURE)
    Tasks: 2 (limit: 4915)
   Memory: 11.8M
   CGroup: /system.slice/xkeysnail.service
           ├─22610 tail -f /opt/xkeysnail/xkeysnail.log
           └─24451 tail -f /opt/xkeysnail/xkeysnail.log

4月 29 18:15:23 dany-pc systemd[1]: xkeysnail.service: Main process exited, code=exited, status=1/FAILURE
4月 29 18:15:23 dany-pc systemd[1]: xkeysnail.service: Failed with result 'exit-code'.
4月 29 18:15:24 dany-pc systemd[1]: xkeysnail.service: Service RestartSec=100ms expired, scheduling restart.
4月 29 18:15:24 dany-pc systemd[1]: xkeysnail.service: Scheduled restart job, restart counter is at 5.
4月 29 18:15:24 dany-pc systemd[1]: Stopped xkeysnail.
4月 29 18:15:24 dany-pc systemd[1]: xkeysnail.service: Start request repeated too quickly.
4月 29 18:15:24 dany-pc systemd[1]: xkeysnail.service: Failed with result 'exit-code'.
4月 29 18:15:24 dany-pc systemd[1]: Failed to start xkeysnail.

服务重启动太快了, 试下Restart=on-failure

另外你都设置User是root了就不要画蛇添足用sudo啊……


参考:Systemd Restart=always is not honored - Unix & Linux Stack Exchange

好的,我试试.非常感谢

我也试过systemd的方式,没成功。现在就是直接扔到了.xinitrc,反正终端界面也用不到。然后在visudo里面加入 xxx ALL=NOPASSWD:/home/xxx/bin/xkeysnail,这样的话sudo启动不需要密码。

大家现在使用xkeysnail一般都是做什么用呢,原来的keysnail和firefox结合在一起,感觉很强大。可惜现在不能使用了。我现在也是使用xkeysnail简单的进行一些按键的设定,感觉使用的频率不怎么大。或许这个插件还有什么我没有发现的很强大的功能?

我昨天 google 了一下. xkeysnail 是一个日本的开发者开发的. google 里面有几篇日文设置自启动的文章. 我参照这个链接解决了自启动的问题

我也是才发现xkeysnail.

看github上面的介绍, 就是一个全局的键盘映射工具. 切换软件时能用同一套快捷键.

我相信开发这个软件的人的初衷,也是想全局化emacs快捷键.

macos 保留了unix里面的快捷键,我不知道linux为什么没有保留下来?我一直很郁闷, 直到看到xkeysnail.

我也非常期待大神的 EAF. 我觉得这个才是解决全键盘操作的正确打开方式.

自成体系,各行其是,是谓“自由之代价”。


欲得自由之权利,必亲陷其中,千转百回,名曰“折腾”。

放弃应有之权利,择人代其行事,是谓“权利之让渡”。

所以,开发者其实是。。。代理人? :relaxed:

1 个赞

你可以试试 surfingkeys 我一直在chromium用的 比vimium好用很多

知道两个键盘如何同时生效吗?我现在笔记本一个自带的键盘,还有一个外接键盘。设置好xkeysnail后,发现在外接键盘上不能生效。我尝试按照网上的教程禁用笔记本上自带的键盘,但是还是禁止不了。不知道为什么。

我参照这个网页也试了一下,出现了下面这种错误,请问该如何解决?

❯ cd ~/.config/systemd/user/
❯ ls
xkeysnail.service
❯ systemctl --user enable xkeysnail
Failed to enable unit: Unit file /home/hcj/.config/systemd/user/default.target.wants/xkeysnail.service does not exist.
❯ sudo systemctl --user enable xkeysnail
[sudo] hcj 的密码:
Failed to connect to bus: 没有那个文件或目录
❯ groups
sys network power lp input wheel autologin hcj uinput

安装 xkeysnail

yay -S xkeysnail-git

配置开机自启动(参考自: xkeysnailをsystemdでデーモン化 - Qiita)

创建输入组

sudo groupadd uinput

添加一个不能登录的新用户到input和uinput组

sudo useradd -G input,uinput xkeysnail -s /sbin/nologin

新建系统文件, 设置input组访问内核的event

input.rules uinput.rules复制到/etc/udev/rules.d/

input.rules 文件内容如下

KERNEL=="event*", NAME="input/%k", MODE="660", GROUP="input"

uinput.rules 文件内容如下

KERNEL=="uinput", GROUP="uinput"

udev规则重新加载

su root
sudo udevadm control --reload-rules  && udevadm trigger

新建服务

sudo vim /etc/systemd/system/xkeysnail.service

内容如下

[Unit]
Description=xkeysnail
Requires = display-manager.service 
After = display-manager.service

[Service]
user=root
KillMode=process
ExecStartPre=/usr/bin/xhost +SI:localuser:root
#修改为自己的配置文件路径
ExecStart=/usr/bin/xkeysnail --quiet ~/config.py
Type=simple
Restart=always
RestartSec=10

# Update DISPLAY to be the same as `echo $DISPLAY` on your graphical terminal.
Environment=DISPLAY=:0

[Install]
WantedBy=default.target

启动服务

sudo systemctl start xkeysnail #开启服务
sudo systemctl status xkeysnail #查看服务状态
sudo systemctl enable xkeysnail #设置服务自启动

解决firefox alt 快捷键无效问题

firefox地址栏输入 about:config,把参数 ui.key.menuAccessKeyFocuses 修改为false.

重启电脑即可

遇到的问题(可忽略)

# xhost启动问题
##安装xhost
-yay -S xorg-xhost
##设置xhost自启动
系统设置——开机和关机——自动启动
- /usr/bin/xhost +SI:localuser:root
3 个赞

谢谢,昨天权限问题没有调整好,按照这个解决了 :smiley:

更简单的配置开机自启动

xkeysnail-macos 里面,找到了更简单的配置,只需配置一个自启动服务。

新建服务

sudo vim /etc/systemd/system/xkeysnail.service

内容如下

[Unit]
Description=xkeysnail

[Service]
Type=simple
KillMode=process
#修改为自己的配置文件路径
ExecStart=/usr/bin/sudo /usr/bin/xkeysnail --quiet ~/config.py
ExecStop=/usr/bin/sudo /usr/bin/killall xkeysnail
Restart=on-failure
RestartSec=3
Environment=DISPLAY=:0

[Install]
WantedBy=graphical.target

启动服务

sudo systemctl start xkeysnail #开启服务
sudo systemctl status xkeysnail #查看服务状态
sudo systemctl enable xkeysnail #设置服务自启动
3 个赞

赞,前置步骤都可以省略了吗,是因为改到了 graphical.target ?还有 xhost 呢?

之前我试过 ExecStartPre 的方法不行,于是把 xhost +SI:localuser:root & 放在了 .xinitrc