Как изменить отображение для клавиши «PowerOff» на клавиатуре?

15

Я купил ноутбук ROG G551JM Asus, который оказался совместимым с Ubuntu. Клавиатура компьютера плохо спроектирована, клавиша «Poweroff» представляет собой обычную клавишу, расположенную в том месте, где обычно находится клавиша «End». С компьютером все в порядке, поэтому я купил его с предположением, что смогу как-то «исправить» проблему, то есть переназначить кнопку PowerOff в клавишу «Завершить».

Кнопка PowerOff сделана неправильно (ASUS G551JM): ASUS G551JM

Обычно есть клавиша «End» (ASUS N56VZ): ASUS N56VZ

Кнопка события «PowerOff» получают с помощью /dev/input/event2: Power Buttonустройства (по данным evtest) с кодом 116 (например , строка из evtest: Event: time 1422895638.246142, type 1 (EV_KEY), code 116 (KEY_POWER), value 1)

Ключ также виден X-серверу, и в конечном итоге Ubuntu может идентифицировать нажатия клавиш как PowerOffключ и запускает полупрозрачное диалоговое окно «Прощай, пользователь Адам ...», которое подтверждает мое желание фактически выключить компьютер.

Проблема в том, что привязка, связывающая нажатие клавиши PowerOff с подпрограммой, которая отображает это диалоговое окно подтверждения, не видна в dconf-editor, и у меня нет подсказки, где ее найти.

Может кто-нибудь сказать мне, где изменить (или удалить) привязку по умолчанию для ключа PowerOff ???

Это должно быть что-то легкое.


изменить 21.IX.2016:

Существует способ навсегда отключить диалоговое окно, см. Как изменить параметры кнопки питания? , Я надеюсь, что после отключения кнопки питания, можно было бы переназначить ее на что-то другое.

Адам Рычковски
источник
Вы решили проблему? Было бы очень полезно, если вы разместите ответ здесь.
Эзз
1
@Ezze Не совсем (я использую другой компьютер из-за этой проблемы). Но мне удалось навсегда отключить диалоговое окно отключения, появляющееся после нажатия клавиши. Хорошо, я обновлю ответ.
Адам Рычковски
Похожий вопрос по Unix и Linux StackExchange.
Ezze
2
Я так ненавижу ASUS за удаление этого ключа. Homeи End"мета" ключи, которые я использую больше всего ... :(
Матье

Ответы:

10

Мне удалось заставить его работать на моем ASUS N751JK в Ubuntu 18.04 LTS и Ubuntu 16.04 LTS (протестировано с настольной средой Unity в обоих случаях и KDE Plasma в 18.04):

  1. Прежде всего, установите действие кнопки «Выключить» на nothing.

    Единство

    Как упомянуто в ответе Johano Fierra :

    gsettings set org.gnome.settings-daemon.plugins.power button-power "nothing"
    

    или альтернативно sudo apt install dconf-toolsи используйте dconf-editorдля изменения org.gnome.settings-daemon.plugins.powerсвойства (как описано здесь ). Перезагрузка или выход из системы требуется, чтобы это работало.

    KDE

    Перейдите в «Параметры системы» , выберите вкладку «Управление питанием» в разделе «Оборудование», затем выберите вкладку «Энергосбережение» , прокрутите вниз, найдите раскрывающийся список «Когда нажата кнопка питания» и измените его значение на «Ничего не делать» . Нажмите кнопку «Применить» , чтобы изменения вступили в силу.

    Энергосбережение

  2. Установите xdotool :

    sudo apt install xdotool
    

    Этот позволит нам запускать ключевые события.

  3. Следующим шагом является нажатие кнопки «End» при нажатии кнопки «Power off» .

    Ubuntu 18.04

    Создайте /etc/acpi/events/powerфайл со следующим содержимым:

    event=button/power
    action=/etc/acpi/power.sh "%e"
    

    и создайте /etc/acpi/power.shскрипт со следующим содержимым:

    #!/bin/sh
    xdotool key End
    

    и добавьте к нему разрешения на выполнение:

    sudo chmod +x /etc/acpi/power.sh
    

    Ubuntu 16.04

    Резервный скрипт ACPI, используемый для обработки события кнопки « Выключение» :

    sudo cp /etc/acpi/powerbtn.sh /etc/acpi/powerbtn.sh.backup
    

    Затем отредактируйте его и найдите следующее:

    # If logind is running, it already handles power button presses; desktop
    # environments put inhibitors to logind if they want to handle the key
    # themselves.
    

    и измените код ниже так, чтобы он выглядел так:

    if pidof systemd-logind >/dev/null; then
        xdotool key End
        exit 0
    fi
    
  4. Чтобы применить эти изменения, нужно выполнить:

    sudo acpid restart
    

    Благодаря Адаму можно acpidавтоматически перезагружаться при входе пользователя в систему (при загрузке системы). Поэтому вместо руководства sudo acpid restartв терминале каждый раз после перезагрузки добавляйте следующую строку:

    session optional    pam_exec.so /usr/sbin/acpid restart
    

    в конец /etc/pam.d/common-sessionфайла.

Ezze
источник
А что sudo acpid reloadвместо перезапуска? Будет ли это работать?
Byte Commander
1
Что решает acpid restartпроблему, так это добавление строки session optional pam_exec.so /usr/sbin/acpid restartв конце /etc/pam.d/common-session. Таким образом, acpid будет перезапущен сразу после входа пользователя, и этого мне достаточно. Проблема наконец решена !!
Адам Рычковски
1
@rtindru, ты должен gsettings setвместо gsettings get.
Ezze
1
Чтобы сделать это в Kubuntu 18.04, мне нужно было дать полномочия на выполнение power.sh: sudo chmod +x /etc/acpi/power.sh@Ezze, возможно, вы могли бы обновить свой ответ, чтобы включить это.
LGenzelis
1
@LGenzelis, спасибо. Обновил ответ.
Ezze
4

Это должно сделать свое дело.

Войдите в терминал:

gsettings set org.gnome.settings-daemon.plugins.power button-power "nothing"
Йохано Фиерра
источник
2
ДА!!! Но тут есть еще одна вещь: как сопоставить его с клавишей «end»?
Адам Рычковски
1
Ввод здесь неизведанной территории, но я думаю, что вы можете просто создать конфигурацию файла xmodmap ($ {HOME} /. Xmodmap) и затем поместить ее в нее: keycode 116 = End , или ввести в терминал: xmodmap -e "keycode 116 = End "
Johano Fierra
К сожалению, это не помогает. Он отключает захват кнопки «Выключить», как это видно по xevкоманде, и не позволяет xmodmapпереназначить ее. И, кстати, код кнопки «Выключить» может быть другим (124 для моего ASUS N751JK).
Эзз
Не следует отключать возможность захвата кнопки ... но как насчет этого. Введите в терминале: gsettings set org.gnome.settings-daemon.plugins.power button-power "shutdown"(таким образом, нажатие кнопки фиксируется), затем отредактируйте /etc/acpi/events/powerbtnи закомментируйте строку #action=/etc/acpi/powerbtn.sh, а затем введите в терминале: xmodmap -e "keycode 124 = End"Это должно помешать кнопке питания делать что-либо и в то же время привязать ее к клавише End.
Johano Fierra
1
Это тоже не помогает, потому что событие «Выключение» обрабатывается не только powerbtn.shскриптом, но и (как минимум) systemd-logindслужбой (возможно, он использует button-powerнастройки, указанные вами в вашем ответе). Вы можете найти строку if pidof systemd-logind >/dev/null; then... exit 0в powerbtn.shкоторой это означает, что скрипт позволяет systemd-logindсамостоятельно обрабатывать событие "Выключение", когда сеанс рабочего стола активен. Одна вещь, в которой вы правы - изменение button-powerзначения не влияет на возможность захвата ключа, но оно уже зафиксировано каким-либо процессом ( systemd-logindили другим).
Ezze