sysfs альтернатива / proc / acpi / button / lid / LID / state

./lastlog.sh | xargs -n1 finger | grep -i 'Never\|Last' | awk -F'(' '{print $1}'
2
22.11.2015, 20:31
2 ответа

Таким образом, окончательный ответ TL;DR: :эта функция не будет реализована из-за низкого качества и ошибок высоко ценимой интеллектуальной собственности, защищенной соглашением о неразглашении, которая называется прошивкой для ноутбуков.

Согласно этой ветке в системе отслеживания ошибок ядра Linux, прошивки слишком многих ноутбуков инициализируют свою внутреннюю переменную состояния крышки нулем при загрузке -, что означает «закрыто», даже если вы не можете включить ноутбук вкл при закрытой крышке (это проверяется прошивкой перед включением -вкл ).

По этой причине ядро ​​и, следовательно, пользовательское пространство могут полагаться только на изменения состояния после загрузки устройства и считать его открытым, если не доказано обратное.

Пользователи root могут проверить состояние ядра напрямую, вызвав соответствующее устройство ввода,код C прост, но вы все равно можете использовать существующую утилиту под названием «evtest», как показано в ответ Стюарта П. Бентли:

# evtest --query /dev/input/EVENT_N EV_SW SW_LID && echo open || echo closed

Обычные пользователи могут вызывать systemd logind через шину D -(начиная с v240):

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"}'
1
27.01.2020, 22:20

У меня был тот же вопрос -похоже, что, к сожалению, (его нет, по крайней мере, из-за того, как устроена моя система ). Патч был отправлен в список рассылки ядра Linux в 2010 году , который должен был добавить файлы в sysfs для запроса состояния переключателя GPIO, но патч , по-видимому, был отозван после отправителю сообщили о ioctl()призывах прочитать это(EVIOCG*).

Я собираюсь использовать evtest для запроса состояния переключателя (, которое выходит из 0, если крышка открыта, и 10, если крышка закрыта):

sudo evtest --query /dev/input/event5 EV_SW SW_LID

Было бы неплохо, если бы существовала версия этого решения, не требующая root-доступа.

1
27.01.2020, 22:20

Теги

Похожие вопросы