./lastlog.sh | xargs -n1 finger | grep -i 'Never\|Last' | awk -F'(' '{print $1}'
Таким образом, окончательный ответ 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"}'
У меня был тот же вопрос -похоже, что, к сожалению, (его нет, по крайней мере, из-за того, как устроена моя система ). Патч был отправлен в список рассылки ядра Linux в 2010 году , который должен был добавить файлы в sysfs для запроса состояния переключателя GPIO, но патч , по-видимому, был отозван после отправителю сообщили о ioctl()
призывах прочитать это(EVIOCG*
).
Я собираюсь использовать evtest для запроса состояния переключателя (, которое выходит из 0, если крышка открыта, и 10, если крышка закрыта):
sudo evtest --query /dev/input/event5 EV_SW SW_LID
Было бы неплохо, если бы существовала версия этого решения, не требующая root-доступа.