スリープ後にxmodmapが失われる

スリープ後にxmodmapが失われる

Ubuntu 18.04では、次の自動起動スクリプトを使用します。

[Desktop Entry]
Type=Application
Exec=/home/user/.xinitrc
Version=1.0
X-GNOME-Autostart-enabled=true
Name=xmodmap
Comment=xmodmap script

これだけですxmodmap /path/.Xmodmap &

システムが起動すると動作します。システムがスリープ状態から復帰すると、再マッピングは動作しなくなります。この問題をどのように解決できますか?

編集:(コメントへの回答)これは問題を解決しません。

$ cat /etc/systemd/system/xmodmapbindings.service
[Unit]
Description=xmodmap bindings
Before=sleep.target
StopWhenUnneeded=yes

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStop=-/home/norake/.xinitrc

[Install]
WantedBy=sleep.target

$ cat ~/.xinitrc 
#!/bin/bash

if [ "$USER" != norake ]; then
    su norake -c 'sleep 5; /usr/bin/xmodmap /home/norake/.Xmodmap' &
    # without su, without sleep, without fork (&): doesn't work either
else
    (sleep 5; /usr/bin/xmodmap /home/norake/.Xmodmap) &
fi

sleep 30いいえ。もちろん、スクリプトを手動で実行すると機能します。

ベストアンサー1

キーボードを取り外して再接続すると、変更された設定も「失われます」。これはここで起こります。一時停止に入るとキーボードが無効になり、有効化を終了すると再接続されるため、一時停止はホットプラグイベントを生成します。

Xサーバーの観点からは、一時停止状態から復帰した後、接続されたキーボードは新しいキーボードなので、2番目のキーボードと同様に標準バインディングで始まる。

これはUSBキーボードドライバの既知の欠点であり、カーネルで修正することは困難です(USBは回復時に再び列挙されるため、新しい番号が割り当てられてもデバイスのIDを維持する方法が必要です)。 Xサーバーで変更するのは難しいです(デバイスの記録を保存する必要があるため)。

あなたができる最善の方法は、おそらくセッションの開始の一部とキーボードのホットプラグ処理の一部としてコマンドを実行することですが、ここでは完全にクリーンなソリューションを考えることはできません。

おすすめ記事