18
15

More than 5 years have passed since last update.

xkeysnailをsystemdでデーモン化

Last updated at Posted at 2018-02-27

しばらくLinux環境のキーリマッパーとしてxremapを使っていたのですが、アプリケーションによっては動かない場面が多く、xremapより低レイヤでリマップを実現しているxkeysnailに乗り換えました。systemdでデーモン化し、自動で起動、仮にプロセスが死んでも復帰させるようにさせたいので設定します。

最終形はAnsibleでroleとしてまとめてますので、https://github.com/yosmoc/Ubuntu-bootstrap/tree/master/roles/xkeysnail を参照ください。

Ubuntu17.10で動作を確認しています。現在のところudevのruleの再読込がうまくいっておらず、このroleを実行後再起動が必要です。

Install

https://github.com/mooz/xkeysnail#installation の通りにインストールします。自分はpip3でインストールしました。

ユーザーにxkeysnailが必要とする権限を与える

xkeysnailはuinputとinput/*にアクセスする必要があります。よって、公式のページではsudoで動かすようREADMEに書かれています。ここでは一般ユーザーにuinput / inputの権限を与え、後にそのユーザー権限でsystemdのserviceを動かします。

uinputグループの作成

おそらく、uinputグループは存在しないので、作成します。


sudo groupadd uinput

実行したいuserをuinput, input groupに加える

sudo useradd -G input,uinput your_username

uinput, input groupがkernelのuinput, eventにアクセスできるように設定する。

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

上記の2ファイルを/etc/udev/rules.d/にコピーする。

sudo cp input.rules uinput.rules /etc/udev/rules.d/

udev ruleのリロード。

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

これでうまくリロードできることを期待していたのですが、今のところうまく行っていません。

systemd serviceの設定ファイル

xremapのsystemd serviceファイルを元に作成しました。

xkeysnail.service
# 1. Copy this to ~/.config/systemd/user/xkeysnail.service
# 2. systemctl --user enable xkeysnail
#
# Note that you need to set proper $DISPLAY on your environment.

[Unit]
Description=xkeysnail

[Service]
KillMode=process
ExecStart=/usr/local/bin/xkeysnail /home/your_username/.xkeysnail/config.py
ExecStartPre=/usr/bin/xhost +SI:localuser:root
Type=simple
Restart=always

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

[Install]
WantedBy=default.target

ExecStartPreでxhostの設定、EnvironmentでDISPLAYを設定している辺りがポイントです。ExecStartは各自読み替えて設定してください。自分の場合は~/に.xkeysnailフォルダを作成し、config.pyを配置してあります。

このファイルを~/.config/systemd/user/においておきます。このフォルダはなければ先に作成しておいてください。

サービスの起動

サービスを有効化、起動します。

systemctl --user enable xkeysnail
systemctl --user start xkeysnail

statusを確認します。

systemctl --user status xkeysnail

以上です。

18
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
15