Linuxユーザーエリアアプリケーションでラップトップカバーが常に開いていると思わせる方法は?

Linuxユーザーエリアアプリケーションでラップトップカバーが常に開いていると思わせる方法は?

ターゲット:

私はLinuxノートブック(LibrebootがインストールされているT400 ThinkPad)を実行しようとしています。正確にふたを開けても閉じても同じようにしてください。つまり、常に「開いている」位置にある壊れたカバースイッチを備えたノートブックをシミュレートしようとしています。私は特定の初期化システムや特定の電源マネージャを必要としない低レベルのソリューションを探しています。すべてのGNU / Linuxシステムに存在すると予想されるソフトウェアのみを探しています。

私が使用しているオペレーティングシステムはDevuan ASCII(64ビット)とTiny Core Linux 10.1(64ビット)で、XorgとFluxboxを実行しています。カーネルバージョンは4.16.2(Devuan)と4.19.10(Tiny Core Linux)です。

テストを受ける:

私はxscreensaver(非活動の1分後にアニメーションを開始するように設定されています)をテストアプリケーションとして使用しています。なぜなら、カバーが閉じたときにxscreensaverがアニメーションを開始または開始しないことがわかったからです。それで、ふたを閉めて1分以上待ってから、ふたをもう一度開いてxscreensaverアニメーションが再生されるのを見て解決策を見つけたことがわかりました。

今まで試したこと:

  1. 機械。私のラップトップはT400で、カバースイッチとしてBluetooth LEDの上に小さな磁石を使用しています。小さな冷蔵庫の磁石をこの位置に置くと、ふたスイッチが「オフ」の位置になり、xscreensaverテストが失敗します。起動時に使用Button.lid_init_state=開くカーネルブートパラメータは役に立ちません。

  2. ボタンモジュール開始パラメーター。この内蔵モジュールはノートブックカバースイッチ用のドライバです。使用ボタン.lid_report_interval=0または=-1または=500000役に立ちません。

  3. i915モジュール開始パラメーター。 Devuanのカーネルサポートi915.panel_ignore_lid開始パラメーター。 -2に設定すると、xscreensaverテストに合格するのに役立ちません。

  4. ビデオモジュール開始パラメーター。使用video.report_key_events=0役に立ちません。

  5. ACPI。無効ACPI =オフカーネルブートパラメータはテストパスには役立ちません。

  6. ふたスイッチを無効にする。驚いたことに、カバースイッチを無効にしても役に立ちませんでした。無効にするのは難しいボタンモジュールはカーネルに組み込まれているため(つまり、次のように表示されます)ls /システム/モジュールしかし、一緒ではありません。lsmod)。ただし、システムが起動したら、キーモジュールを使用してすべてのデバイスをバインド解除できます。

  # 1. find the devices that use the button driver:
$ ls /sys/bus/acpi/drivers/button
LNXPWRBN:00  PNP0C0D:00   PNP0C0E:00   bind         uevent       unbind
  # 2. disable the devices one by one:
$ echo "LNXPWRBN:00" | sudo tee /sys/bus/acpi/drivers/button/unbind
LNXPWRBN:00
$ echo "PNP0C0D:00" | sudo tee /sys/bus/acpi/drivers/button/unbind
PNP0C0D:00
$ echo "PNP0C0E:00" | sudo tee /sys/bus/acpi/drivers/button/unbind
PNP0C0E:00
  # 3. satisfy oneself that the devices are gone:
$ ls /sys/bus/acpi/drivers/button
bind    uevent  unbind

それにもかかわらず、xscreensaverアニメーションはカバーが開いたときに始まりますが、カバーを閉じると起動しません。

  1. タッチパッドイベントキャプチャ。出力を観察しながら気づきました。猫/開発者/入力/イベント5ノートブックカバーを開閉すると、Synapticsタッチパッドがいくつかの入力を生成します。すべての入力をキャッチevtest --grab /dev/input/event5 >/dev/null役に立ちません。

  2. Xに邪魔にならないように言う。 Xの起動後、起動時に通常のユーザーとして次のコマンドを実行します。xset オフ; xset s noblank。このコマンドは、Xに空のスクリーンスクリーンセーバーを望まない、DPMSも望ましくない、そしてスクリーンを空にしてはいけないことを伝えます。これは役に立ちません。

  3. バイオス。 BIOS(私の場合はLibreboot)レベルでカバースイッチを無効にする方法を検索しましたが、関連するものが見つかりませんでした。

それが私が今まで試したことのすべてです。上記のすべての項目を組み合わせても、ユーザースペースアプリケーション(xscreensaverはそのまま)は、ノートブックカバーが開いているか閉じているかに応じて、まだ動作が異なります。 (xscreensaverの場合、ノートブックカバーが開いているときにのみアニメーションが開始され、ノートブックカバーが閉じているときはアニメーションは開始されません。)

もちろん、ソフトウェアを使用してノートブックカバースイッチを完全に無効にし、ユーザーエリアアプリケーションにノートブックカバーが常に開いていると思うようにする方法が必要です。私は何を見逃していますか?

ベストアンサー1

実際には上記の6番ですするカバースイッチを完全に無効にします。

問題は、カバーを閉じるとT400のタッチパッドで実際にわずかなノイズが発生し、xscreensaver(入力デバイスがアイドル状態になるのを待つ)などのアプリケーションが実行されないことです。出力を見て見つけました。

$ sudo cat /dev/input/event5

(私のシステムではevent5がタッチパッドです)

ふたスイッチを無効にするそしてこのようなタッチパッドは予想される動作を引き起こします。

# echo "PNP0C0D:00" > /sys/bus/acpi/drivers/button/unbind
# echo "PNP0C0E:00" > /sys/bus/acpi/drivers/button/unbind
# echo "serio1" > /sys/bus/serio/drivers/psmouse/unbind

これで、カバーが開いているか閉じているかに関係なく、すべてのアプリが同じように動作します。

ただし、serio1をバインド解除すると、トラックポイント(「ニップルマウス」)が応答しなくなります。これは望ましくない副作用です。

おすすめ記事