procfs
ACPI は新しいカーネルバージョンでは廃止されました。何sysfs
を交換するのか、ふたボタンの状態を読むためのきちんとした方法がわかりません。これを行う新しい方法は何ですか?
答え1
要約:この正確な機能は、低ラップトップ品質とNDAパスファームウェアの欠陥のために永遠に消えました。しかし、解決策があります。
~によるとこのスレッドLinuxカーネルのバグトラッカーでは、ラップトップのファームウェアが多すぎると、起動時に内部カバー状態変数が0に初期化されます。閉鎖。カバーが閉じた状態では誰もノートブックを開くことができないという事実にもかかわらず(電源を入れる前に常にファームウェアで確認されます)、実際の状態とファームウェアで報告された状態は明らかに一致しません。
したがって、カーネルはファームウェアが静的に報告した状態を完全に無視します。セルフステータスを維持するためにデバイスが起動した後、ファームウェアのACPI割り込みイベントにのみ依存してステータス変更を報告します。特に明記しない限り、開いている状態であると仮定します。
rootユーザーカーネルの状態は、対応する入力デバイスを呼び出して直接確認できます。 Cコードは簡単ですが、evtest
以下のように既存のユーティリティを引き続き使用できます。スチュアートP.ベントレーの答え:
evtest --query "/dev/input/EVENT_N" "EV_SW" "SW_LID" && echo "open" || echo "closed"
権限のないユーザーlogind
ステータスは、D-Bus(v240以降)のsystemdを介してのみ照会できます。
dbus-send --system --print-reply=literal \
--dest="org.freedesktop.login1" "/org/freedesktop/login1" \
"org.freedesktop.DBus.Properties.Get" \
string:"org.freedesktop.login1.Manager" string:"LidClosed" | \
awk 'NR == 1 { print $3 == "true" ? "closed" : "open" }'
または
busctl get-property "org.freedesktop.login1" "/org/freedesktop/login1" \
"org.freedesktop.login1.Manager" "LidClosed" | \
awk 'NR == 1 { print $2 == "true" ? "closed" : "open" }'
答え2
私にも同じ問題があります。残念ながら、そのような問題はないようです(少なくとも私のシステムが設定された方法では)。 ㅏ2010年に、Linuxカーネルメーリングリストにパッチが提出されました。これにより、GPIOスイッチの状態を照会するためにsysfsにファイルが追加されますが、パッチは撤回されたようです提出者にioctl()
この記事の閲覧要求を通知した後(EVIOCG*
)。
私がしようとしている解決策は次のとおりです。テストスイッチ状態の問合せ
sudo evtest --query /dev/input/event5 EV_SW SW_LID
しかし、rootアクセスを必要としないこのソリューションのバージョンがあれば良いでしょう。