为什么我的 HP 笔记本电脑在 Ubuntu 18.04 上“飞行模式”不断切换?

为什么我的 HP 笔记本电脑在 Ubuntu 18.04 上“飞行模式”不断切换?

我有一台 HP Spectre x360 可转换笔记本电脑,运行的是 Ubuntu 18.04。每次我将屏幕转向一侧或切换到平板模式再转回来时,“飞行模式”就会被激活。事实上,当我启动并登录时,我必须手动关闭“飞行模式”并重新打开 wifi。我不想像这样禁用 gnome rfkill 插件:“gsettings set org.gnome.settings-daemon.plugins.rfkill active false”,因为这样我就不能再使用蓝牙了。此外,出于某种天杀的原因,即使我确实禁用了插件,gnome shell 还是会打开“飞行模式”,这意味着我每次登录时都必须重新打开 wifi。这太烦人了,我真的很喜欢 18.04 的走向,但这严重破坏了整个 gnome shell 体验。

答案1

在 GNOME Shell 中,许多 HP 笔记本电脑在启动时、屏幕向侧面倾斜时或盖子打开/关闭时都会自动激活“飞行模式”。以下是针对运行 Linux 并使用 GNOME Shell 的 HP 笔记本电脑的修复方法。键码 240KEY_UNKNOWN在 中定义为(一种无操作键)/usr/include/linux/input-event-codes.h。此外,您的系统日志将不再提示您定义 HP e057 和 e058 代码,这可能会非常烦人。

首先是使用经典的 SysV 初始化脚本进行修复,将其放置在init.d目录中并进行相应的符号链接(基本上,我们希望它能够在除 halt(0)或 reboot(6)之外的任何运行级别上运行)。

第二个是systemd更可靠的服务,可能最近有所systemd改进,它也适用于 Fedora 28 和其他发行版平台。特别是在 Fedora 上,您会发现目录中几乎完全没有脚本/etc/init.d,只有一份简短的 README 详细说明了从 SysV 到 的过渡systemd

第一种方法可以工作,但第二种方法更加“未来友好”,特别是考虑到 Ubuntu 的发展方向,并且工作方式也稍微不那么......烦人。initsystemd脚本实际上非常方便,并且在 Ubuntu 18.04 中完全实现并经常使用。

旧的 SysV 方法(在终端中输入):

sudo sh -c 'printf "#!/bin/sh\n/usr/bin/setkeycodes e057 240 e058 240\n" > /etc/init.d/hp-keycodes'
sudo chmod +x /etc/init.d/hp-keycodes
sudo ln -s /etc/init.d/hp-keycodes /etc/rc1.d/K01hp-keycodes
sudo ln -s /etc/init.d/hp-keycodes /etc/rc2.d/S01hp-keycodes
sudo ln -s /etc/init.d/hp-keycodes /etc/rc3.d/S01hp-keycodes
sudo ln -s /etc/init.d/hp-keycodes /etc/rc4.d/S01hp-keycodes
sudo ln -s /etc/init.d/hp-keycodes /etc/rc5.d/S01hp-keycodes
sudo reboot

新的推荐systemd方法(在终端中输入):

sudo nano /etc/systemd/system/hp-keycodes.service

粘贴以下行或将其输入到文件中:

[Unit]
Description=HP setkeycodes fix

[Service]
Type=oneshot
Restart=no
RemainAfterExit=no
ExecStart=/usr/bin/setkeycodes e057 240 e058 240

[Install]
WantedBy=rescue.target
WantedBy=multi-user.target
WantedBy=graphical.target

Ctrl保存并使用+ x,确认文件名y。然后,在终端中输入:

sudo systemctl daemon-reload
sudo systemctl enable --now hp-keycodes.service

就是这样,当您倾斜屏幕或关闭/打开笔记本电脑盖时不再出现令人恼火的奇怪东西!

答案2

我在 HP Spectre x360 上使用 17.10 时遇到了同样的问题。事实上,我遇到了 Nicholas 和 Pierre-Antoine 问题:

  • 每次我登录或切换到平板电脑模式时都会激活飞行模式;
  • Fn+F12(切换飞行模式键)不再起作用。

为了快速切换 wifi,我制作了一个小脚本:

## Content of ~/scripts/wifi_toggle : ##
    #!/bin/bash
    str=`export LANGUAGE=en_GB ; nmcli r wifi`
    [ "$str" == "enabled" ] && nmcli r wifi off
    [ "$str" == "disabled" ] && nmcli r wifi on

我很少使用蓝牙,所以它只能处理 wifi,但您可以轻松地修改它以同时处理蓝牙和 wifi。

所有这些都明显是从 17.04 开始的,在 17.04 中一切都运行完美。我尝试了 18.04 测试版,但情况与 17.10 相同。

Nicholas,Pierre-Antoine,我想就这些问题填写两份错误报告(每个问题一份报告)。你认为我报告完后,你能在这些报告中发表评论吗?这将有助于确认错误状态(受影响的用户不止一个)。

干杯

答案3

非常感谢你!

我可以确认@尼古拉斯的修复也适用于我的华为 Matebook D15(不可转换),它在挂起后似乎失去了所有连接。

检查文件后

/usr/include/linux/input-event-codes.h 

我可以确定在我的系统中密钥 240 也被标记为 KEY_UNKNOWN,所以我决定给他的“系统化“解决方案试一试……而且成功了!显然,我更改了新文件的名称以反映我的系统(“huawei-keycodes.service”),并且还更改了文件中服务的描述,但其他一切都只是复制/粘贴工作。再次感谢,我希望我的经验可以帮助其他遇到类似问题的人,他们不一定使用 HP 机器。

编辑:刚刚意识到它只在我主动挂起计算机时才起作用,当计算机在关闭盖子时自动挂起时它不起作用......我还需要做更多的研究......

答案4

作为 Nicholas Stommel 回答的后续,udev 也能够从 hwdb 中为相应的硬件设置键码。事实上,systemd 的 udev hwdb 是导致此故障的罪魁祸首。我有以下代码片段/etc/udev/hwdb.d/70-keyboard.hwdb

# systemd's udev hwdb breaks our keyboard tablet mode switcheroo thing.  Fix it.

evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHPSpectrex360Convertible*:pvr*
 KEYBOARD_KEY_ab=unknown    # emitted by brightness keys
 KEYBOARD_KEY_d7=f22        # normal mode - turn touchpad on
 KEYBOARD_KEY_d8=f23        # tablet mode - turn touchpad off

将这些键设置为 F22 和 F23 将使 GNOME 在从平板电脑模式切换时显示触摸板开/关图标。其ab定义是每当按下亮度降低/增加键时,都会静音内核警告。

我不知道这里的选择器是否限制太多,但它在我的 2015 款笔记本电脑上运行正常。运行 即可找到选择器中的相关产品名称sudo dmidecode

相关内容