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


15

Я купив ноутбук Asus ROG G551JM, який виявився сумісним з 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-редакторі, і я не маю підказки, де його знайти.

Хтось може сказати мені, де можна змінити (або видалити) прив'язку за замовчуванням для клавіші PowerOff ???

Це повинно бути щось легке.


редагувати 21.IX.2016:

Існує спосіб назавжди вимкнути діалогове вікно, див. Як змінити параметри кнопки живлення? . Я сподіваюся, що після відключення кнопки живлення можна буде перепризначити її на щось інше.


Ви вирішили питання? Було б дуже корисно, якщо ви опублікуєте відповідь тут.
ezze

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.

    Єдність

    Як згадується у відповіді Йохано Фієрри :

    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файлу.


А що робити sudo acpid reloadзамість перезавантаження? Це би спрацювало?
Байт-командир

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
ТАК!!! Але тут є інша річ: як відобразити це в клавішу «кінець»?
Адам Річковський

1
Ввівши сюди незареєстровану територію, але я думаю, що ви можете просто створити конфігурацію файлу xmodmap ($ {HOME} /. Xmodmap) і потім ввести це: keycode 116 = End , або ввести в термінал: xmodmap -e "keycode 116 = End "
Johano Fierra

На жаль, це не допомагає. Він вимикає захоплення кнопки "Вимкнення живлення", як це бачиться xevкомандою, і не xmodmapдозволяє перезавантажувати її. І до речі, клавішний код кнопки "Вимкнути" може бути різним (124 для мого ASUS N751JK).
ezze

Це не повинно відключити можливість захоплення кнопки ... але як щодо цього. Введіть в термінал: 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.