如何更改键盘上的“ PowerOff”键的映射?


15

我购买了ROG G551JM Asus笔记本电脑,事实证明该笔记本电脑兼容Ubuntu。计算机键盘的设计不当,其按键“ Poweroff”是一个普通的按键,放置在通常可以找到“ End”键的位置。否则,计算机就可以了,所以我以这样的假设购买了计算机,即我能够以某种方式“解决”问题,即将PowerOff按钮重新映射到“ End”键。

电源关闭按钮有误(ASUS G551JM): 华硕G551JM

通常会有一个“结束”键(ASUS N56VZ): 华硕N56VZ

的“关机”按钮事件由产生/dev/input/event2: Power Button装置(如由报告evtest与代码116)(来自实施例线evtestEvent: time 1422895638.246142, type 1 (EV_KEY), code 116 (KEY_POWER), value 1

该键对于X服务器也是可见的,最终Ubuntu可以将按键识别为PowerOff键,并启动“再见用户Adam ...”半透明对话框,确认我实际上将关闭计算机的意愿。

问题在于,将PowerOff按键与显示确认对话框的例程绑定在一起的绑定在dconf-editor下不可见,而且我也没有任何提示。

谁能告诉我,在哪里更改(或删除)PowerOff键的默认绑定???

这应该很容易。


编辑21.IX.2016:

有一种方法可以永久禁用对话框,请参阅如何修改电源按钮的选项?。我希望在禁用电源按钮之后,可以将其重新分配给其他功能。


您解决了这个问题吗?如果您在此处发布答案,这将非常有用。
Ezze

1
@Ezze不是真的(由于此问题,我使用的是其他计算机)。但是我设法永久禁用按下键后产生的关闭对话框。好,我将更新答案。
亚当·里奇科夫斯基

在Unix和Linux StackExchange上的相关问题
Ezze

2
我非常讨厌ASUS删除该键。Home并且End是“元”键我用的最多... :(
马蒂厄

Answers:


10

我能够在Ubuntu 18.04 LTS和Ubuntu 16.04 LTS的华硕N751JK上运行它(在两种情况下均通过Unity桌面环境进行了测试,在18.04中通过KDE Plasma进行了测试):

  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. 下一步是触发“结束”键,按下“电源关闭”按钮。

    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:@Ezze的执行权限sudo chmod +x /etc/acpi/power.sh,也许您可​​以更新答案以包括此内容。
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重新映射它。顺便说一句,“关闭电源”按钮的键码可能有所不同(对于我的ASUS N751JK,为124)。
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"这应防止电源按钮执行任何操作,同时将其映射到“结束”键。
Johano Fierra

1
这也无济于事,因为“ Power off”事件不仅由powerbtn.sh脚本而且(至少)由systemd-logind服务处理(可能使用button-power答案中提到的设置)。您可以在行中找到if pidof systemd-logind >/dev/null; then... exit 0powerbtn.sh这意味着脚本可以systemd-logind在桌面会话处于活动状态时自行处理“关闭电源”事件。您正确的一件事-更改button-power值不会影响捕获密钥的能力,但是已经被某个过程(systemd-logind或其他过程)捕获了。
Ezze
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.