web-dev-qa-db-ja.com

休止状態の後にタッチパッドが機能しない

最新のArch/AntergosLinuxを使用しています。

休止状態から再開した後、タッチパッドが機能しなくなります。 this バグの影響を受けているようで、再開するたびにSudo rmmod i2c_hid; modprobe i2c_hidと入力して、タッチパッドを動作状態に戻す必要があります。

スクリプトfix-touchpad.sh/usr/lib/systemd/system-sleepに追加してそのプロセスを自動化し、休止状態からの再開時に実行されるようにしました。

#!/bin/sh
if [ $1 = post ]
then
    rmmod i2c_hid
    modprobe i2c_hid
fi

スクリプトは、起動時にifテストの前後とfiの直前でecho "something" > log.logを使用してテストしました。しかし、それは私のタッチパッドを生き返らせません。

また、再開後にsh fix-touchpad.sh postを使用してスクリプトを正常にテストしましたが、タッチパッドが再び起動するのを確認してください。

再開手順の一部として実行されたときに、スクリプトがタッチパッドを修正しないのはなぜですか?

タッチパッドを修正する他の方法はありますか?

3
pandita

理由はわかりませんが、問題は、休止状態から戻ったときにモジュールの削除と追加の両方を試みているためです

解決策1

私はあなたと同じ問題に遭遇し、休止状態の前にモジュールを削除し、後で再び追加しようとするまで、スクリプトfix-touchpad.shは機能しませんでした。

Fedoraフォーラムの this answer に基づいています。

$ cat /usr/lib/systemd/system-sleep/fix-touchpad.sh
#!/bin/bash
[ "$1" = "pre" ] && modprobe -r i2c_hid
[ "$1" = "post" ] && modprobe i2c_hid
exit 0

解決策2

また、休止状態/再開時にコードを実行する別の方法を見つけました。休止状態の前にモジュールを削除した場合にのみ機能しました。 ArchのWiki Power management#Sleep hooks で説明されているように、スリープサービスによってトリガーされるsystemdサービスを作成できます。

ウィキの指示に基づいて、私は次のことを思いつきました:

$ cat /etc/systemd/system/root-resume.service
[Unit]
Description=(un)load module i2c_hid when going to/from sleep
Before=sleep.target
StopWhenUnneeded=yes

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=modprobe -r i2c_hid
ExecStop=modprobe i2c_hid

[Install]
WantedBy=sleep.target

サービスはsystemd enable root-resumeで有効にする必要があります。 ExecStartはsleep.targetの前に実行され、ExecStopは再開中に実行されることに注意してください。

解決策3

[〜#〜] aur [〜#〜]systemd-suspend-modulesパッケージをチェックしてください。基本的には、ユーザー設定ファイルにリストされているすべてのモジュールに対してSolution 1を実行するサービスを定義します。 「特定のモジュールとそれに依存するすべてのモジュールを再帰的にアンロードする」ため、他のモジュールに適している可能性があります( https://github.com/parkouss/systemd-suspend-modules/blob/master/suspend- modules#L19 )。

3
Antonio Carlos