Новое использование для Lenovo onekey ключ восстановления

У меня есть ноутбук Lenovo G570 с небольшим ключом, названным onekey восстановлением рядом с кнопкой питания, и начиная с прибытия в Linux это имеет, стал бесполезным.

Существует ли способ превратить этот ключ в кнопку сброса, например? Или добавить запись в Личинке, чтобы заставить его загрузить опции восстановления?

Я видел подобные сообщения в здесь, но у меня нет окон или двойной загрузки, мой диск является разделом отдельного диска с установленным Gnome Ubuntu, у меня даже нет Области подкачки.

6
задан 1 February 2018 в 00:45

2 ответа

У меня нет идеи, как использовать эту кнопку с 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 файл как флаг и счетчик, как это описано здесь. Таким образом системная перезагрузка будет выполнена при нажатии кнопки три раза.

  1. Изменить /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
    
  2. Создайте сценарий /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 и свяжите сценарий с ним

  1. Упакуйте сценарий в ящики /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
    
  2. Проблема (в рамках этого подхода), мы должны использовать 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
    
  3. Перейдите к Параметрам настройки системыКлавиатураЯрлыки (вкладка) →, Пользовательские Ярлыки (раздел) → Добавляют новый +.

    enter image description here

    • В Пользовательском типе окна ярлыка:

    • Имя: reboot

    • Команда: sudo /usr/local/bin/my_rbt
    • Нажмите на Apply
  4. Нажать Disabled в правом столбце и нажатии обсужденная кнопка.

    enter image description here

Именно.

5
ответ дан 23 November 2019 в 07:42

Кажется, что для ноутбуков 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 .

После нахождения кода клавиши, все, что необходимо искать, - то, как отобразить код клавиши на определенное действие. Вот некоторые полезные вопросы:

2
ответ дан 23 November 2019 в 07:42

Другие вопросы по тегам:

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