🌊

Ubuntu20.04でマシン起動時、サスペンド復帰時にスクリプトを実行する

2021/03/27に公開
1

はじめに

Macから乗り換えてUbuntuを使い始めましたが、
元がWindows用のPCだったので、キーボードの配置が慣れないです。

そのため、xmodmapを使ってキーマップを変更していますが、
マシンを起動orサスペンド復帰時でキーマップが元に戻ってしまうのでxmodmap ~/.Xmodmap を実行するのが面倒だったりします。

マシン起動時、サスペンド復帰時に任意のスクリプトを実行するようにします。

こちらの記事を参考
https://unix.stackexchange.com/questions/505350/xmodmap-lost-after-sleep

サスペンド復帰時

/lib/systemd/system-sleep/key-map

#!/bin/bash

USERN=ユーザ名
SCRIPT=/home/ユーザ名/key_map

if [ "$2" != "suspend" ] ; then  exit 0 ; fi

if [ "$1" = "post" ] ; then
	DISPLAY=:0
	export DISPLAY
	# サスペンド復帰時にキーボード認識するのに時間差があるため、sleep
	sleep 20
	su $USERN -c "$SCRIPT"
fi

マシン起動時

/usr/local/etc/rc.d

#!/bin/bash

sleep 30

xmodmap /home/ユーザ名/.Xmodmap

exit 0

Discussion

ShimotsukiShimotsuki

Ubuntu20.04でサスペンド復帰時、xmodmapを手動で実行するのが煩わしく思い、貴方様の記事にたどり着きました。
本記事や別なQ&Aなども参考にしつつ、スクリプトを/usr/lib/systemd/system-sleep/以下に置いているのですが所望の結果が得られず(具体的には、xmodmapに関する処理のみ効きません。。。)、困っております。
なにか、原因等に思い当たる点などありますでしょうか。
参考までに、以下にスクリプトを記載いたします。

#!/bin/bash

USERN=XXXX

case "$1" in
        post)
                # 動作しない(sleepは動作している)
                /usr/bin/sudo -u $USERN bash -c "/usr/bin/sleep 10; /usr/bin/xmodmap /home/$USERN/.Xmodmap"

                # 動作しない(sleepは動作している)
                /usr/bin/su $USERN -c "/usr/bin/sleep 10; /usr/bin/xmodmap /home/$USERN/.Xmodmap"

                # 動作しない(sleepは動作している)
                /usr/bin/sleep 10
                /usr/bin/xmodmap /home/$USERN/.Xmodmap

                # これは動作(この他にも/usr/bin/echoなどは動作)
                /usr/bin/date >> /tmp/logs/sleep-monitor/post.log
        ;;
esac

exit 0