systemdでxmodmapを実行する

systemdでxmodmapを実行する

エスケープをCaps Lockに再マップするスクリプトがあります。私は通常手動でスクリプトを呼び出します。

xmodmap /home/myusername/.Xmodmap;

.Xmodmap は以下を含むファイルです。

remove Lock = Caps_Lock
keysym Escape = Caps_Lock
keysym Caps_Lock = Escape
add Lock = Caps_Lock

起動時にこのコマンドを実行したいと思います。私がしたことは、/etc/systemd/systemに移動し、次の内容で "startup.service"というファイルを作成することでした。

[Unit]
Description=Startup Applications

[Service]
Type=oneshot
RemainAfterExit=false
ExecStart=/home/myusername/scripts/.qs

[Install]
WantedBy=multi-user.target

.qsは-rwxr-xr-x権限を持つスクリプトで、内容は次のとおりです。

#!/bin/bash
/usr/bin/xmodmap /home/myusername/.Xmodmap; 
rm /home/myusername/stop_time; 
date +%D' '%T > /home/myusername/stop_time

(startup.serviceの代わりに)systemctlを有効にするstartupと入力してコマンドを有効にしました。

楽しく。 2番目と3番目のコマンドは、新しい起動時に正しく機能しますが、最初のコマンドはそうではありません。どういうわけかコマンドを実行またはスキップするようです。このコマンドは、ターミナルウィンドウで実行すると正常に動作します。私がここで何を見逃しているのでしょうか?

答え1

xmodmap実行中のXserverで実行します。システムの起動時に実行するものではありません。これは通常、ユーザー初期化スクリプトの一部としてグラフィカルログイン後に実行することです。

理論的には、systemdを介してこれを実行して、ディスプレイマネージャのXserverでキーマップを調整し、ファイルAfter=display-manager.serviceで使用できます.service。これにより、グラフィカルログインが可能になるまでsystemdは実行されません。これは、Wayland ベースのディスプレイ マネージャ、Wayland セッション、または新しい Xserver プロセスを使用するユーザー セッションには影響しません。ユーザーの初期化中に再実行することをお勧めします。


(XKBオプションはcaps:swapescapeユーザーの操作と同様に機能し、Xserverが動作しないWaylandや他のLibinput認識コンテキストでうまく機能します。デフォルトでは廃止され、 .Xmodmap可能であれば使用を避ける必要があります。)xmodmapxmodmap

関連情報