У меня есть ноутбук Lenovo G570 с небольшим ключом, названным onekey восстановлением рядом с кнопкой питания, и начиная с прибытия в Linux это имеет, стал бесполезным.
Существует ли способ превратить этот ключ в кнопку сброса, например? Или добавить запись в Личинке, чтобы заставить его загрузить опции восстановления?
Я видел подобные сообщения в здесь, но у меня нет окон или двойной загрузки, мой диск является разделом отдельного диска с установленным Gnome Ubuntu, у меня даже нет Области подкачки.
У меня нет идеи, как использовать эту кнопку с GRUB, но существует по крайней мере два подхода, как сделать это применимым в рамках Ubuntu. Например, если Вы хотите связать команду перезагрузки с той кнопкой, Вы могли бы: (1) создать acpi событие или (2) создать пользовательский ярлык.
acpi event
и свяжите команду перезагрузки с нимСначала необходимо использовать acpi_listen
и поймайте событие при нажатии кнопки. Просто выполните команду acpi_listen
и нажатие кнопка:
$ acpi_listen
button/prog1 PROG1 00000080 00000000 K
button/prog1 PROG1 00000080 00000000 K
событие в моей системе, когда я нажимаю обсужденную кнопку.Затем необходимо упаковать в ящики файл, который обработает это событие. Файл должен быть расположен в каталоге /etc/acpi/events/
. Назовите его, например, reboot
. Содержание /etc/acpi/events/reboot
должно быть подобным как:
# /etc/acpi/events/reboot
# This will reboot the system
event=button/prog1 PROG1 00000080 00000000 K
action=systemctl reboot
Сохраните файл и перезапустите acpi демона:
sudo systemctl restart acpid.service
IMO это - большая часть простого метода. Это должно работать также, когда пользователь не зарегистрирован. Вот немного ссылок, где можно найти дополнительную информацию и примеры:
acpi event
и свяжите сценарий с нимМы можем добавить страховку в случае, если Вы нажимаете кнопку случайно. Здесь мы создадим сценарий, который будет использовать a tmp
файл как флаг и счетчик, как это описано здесь. Таким образом системная перезагрузка будет выполнена при нажатии кнопки три раза.
Изменить /etc/acpi/events/reboot
таким образом:
# /etc/acpi/events/reboot
# This will reboot the system
event=button/prog1 PROG1 00000080 00000000 K
action=/etc/acpi/reboot.sh
Перезапустите acpi демона:
sudo systemctl restart acpid.service
Создайте сценарий /etc/acpi/reboot.sh
и помещенный следующие строки как его содержание:
#!/bin/bash
FLAG_FILE="/tmp/sysyem_reboot_flag"
# If the file exists and it is older than 30 seconds, then reset the counter
# Else If the file doesn't exist or its 'value' is less than 2, then increment
# Else (when the file exists, its value is equal or greater than 2, and its age is less than 30 seconds) reboot the system
if [ -f "${FLAG_FILE}" ] && [[ $(find "${FLAG_FILE}" -newermt '-30 sec') == '' ]]; then
echo '1' > "$FLAG_FILE"
elif [ ! -f "${FLAG_FILE}" ] || (( $(cat "$FLAG_FILE") < 2 )); then
touch "$FLAG_FILE"
NEW_VALUE=$(( $(cat "$FLAG_FILE") + 1)) && echo "$NEW_VALUE" > "$FLAG_FILE"
else
systemctl reboot
fi
Сделайте это исполняемым файлом:
sudo chmod +x /etc/acpi/reboot.sh
Теперь systemctl reboot
команда будет выполнена при нажатии кнопки три раза, в течение 30 секунд.
custom shortcut
и свяжите сценарий с нимУпакуйте сценарий в ящики /usr/local/bin/my_rbt
(это можно было назвать и расположить каждый раз, когда Вы хотите), и сделайте это исполняемым файлом. Вот единственная командная строка, которая делает это:
$ echo -e '#!/bin/sh\nsudo systemctl reboot' | sudo tee /usr/local/bin/my_rbt && sudo chmod +x /usr/local/bin/my_rbt
#!/bin/sh
systemctl reboot
Проблема (в рамках этого подхода), мы должны использовать sudo
выполнить сценарий и должно позволить пользователям делать, это без пароля - здесь предоставлено больше подробная информация об этом шаге: Как я выполняю определенные команды sudo без пароля? Таким образом, мы должны упаковать в ящики файл, расположенный в /etc/sudoers.d/
, названный, например, my_rbt
. Поскольку это имеет целью, мы должны использовать команду visudo -f
:
sudo visudo -f /etc/sudoers.d/my_rbt
Содержание файла должно быть:
ALL ALL=NOPASSWD: /usr/local/bin/my_rbt
Перейдите к Параметрам настройки системы → Клавиатура → Ярлыки (вкладка) →, Пользовательские Ярлыки (раздел) → Добавляют новый +.
В Пользовательском типе окна ярлыка:
Имя: reboot
sudo /usr/local/bin/my_rbt
Нажать Disabled
в правом столбце и нажатии обсужденная кнопка.
Именно.
Кажется, что для ноутбуков Lenovo (по крайней мере, мой G575) ключ Восстановления OneKey является другим ключом.
Используя эти xev
команда, можно узнать scancode. xev
откроет окно с черным квадратом, переместить Вашу мышь в нем и затем нажать клавишу OKR.
KeyPress event, serial 51, synthetic NO, window 0x1600001,
root 0x497, subw 0x1600002, time 1092364, (50,41), root:(52,479),
state 0x0, keycode 156 (keysym 0x1008ff41, XF86Launch1), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 51, synthetic NO, window 0x1600001,
root 0x497, subw 0x1600002, time 1092364, (50,41), root:(52,479),
state 0x0, keycode 156 (keysym 0x1008ff41, XF86Launch1), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
Вы видите код клавиши как keycode
156
.
После нахождения кода клавиши, все, что необходимо искать, - то, как отобразить код клавиши на определенное действие. Вот некоторые полезные вопросы: