飞行模式在睡眠模式后打开并卡住

飞行模式在睡眠模式后打开并卡住

我在 HP Envy 15 上使用 Ubuntu 18.04 LTS 与 Windows 7 双启动。我的笔记本电脑进入睡眠模式(盖子关闭)后,它会打开飞行模式,但关闭它的按钮变灰,并显示“使用硬件开关关闭”,唯一的其他开关是 +,FnF12不起作用。它在重启时自行修复,但我想知道是否有办法阻止它。在 Windows 中,这种情况发生在插入电源并使用电池的情况下。睡眠前:

$ sudo rfkill
ID TYPE      DEVICE      SOFT      HARD
 0 bluetooth hci0   unblocked unblocked
 1 wlan      phy0   unblocked unblocked

睡眠后:

$ sudo rfkill
ID TYPE      DEVICE      SOFT      HARD
 1 wlan      phy0   unblocked   blocked

我尝试过通过阻止和解除阻止来做到这一点rfkill,但是没有用,我发现禁用它的唯一方法是通过重新启动。

答案1

编辑:此解决方案已被我发现的实际根本问题的修复所取代。请忽略以下信息

总结:https://github.com/snyball/hawk。使用此工具将键码 255 重新映射到空字符,问题就解决了。

这里的问题是,无论 Linux 为盖子/平板电脑模式开关使用什么驱动程序,都会错误地将它们解释为生成键码 255(或 247,取决于……东西。我一直不明白为什么有时是其中一个)。键码 255 恰好是 rfkill 键,它将系统置于飞行模式。

我花了太。太。长了。解决这个问题。我尝试过弄乱 DKMS,尝试过使用 Xmodmap(实际上它工作了一段时间,直到我意识到 X11 弄乱了我的触摸板),在后台运行了一个不断运行的程序rfkill unblock all,我甚至尝试过在内核级别禁用键码。最后什么奏效了?一个叫做 Hawk 的免费开源程序。

霍克(https://github.com/snyball/hawk) 是迄今为止解决此问题的最佳方法,至少在出现故障的内核驱动程序更新之前是这样。它与桌面无关(甚至在控制台模式下也能工作),设计为在启动时运行,与 Xmodmap 不同,它是模块化且可编写脚本的。我所做的是创建一个名为“fixapmode.hwk”的脚本(名称无关紧要),内容如下:

key(255) => insert ""

(如果您复制我的方法,请记住引号之间没有空格)。

然后我将脚本设置为可执行文件,在 Hawck 中启用它,将 Hawck 设置为在启动时运行,它就成功了!唯一挥之不去的问题是,我的笔记本电脑仍然会以飞行模式启动,因为 Hawck 不会在启动时立即启动。我通过使用命令创建一个新的启动程序解决了这个问题rfkill unblock all。这样,我可以说问题完全解决了。唯一烦人的是,第一次从启动登录时,您会收到来自 Hawck 的通知,告知您它已成功加载了您的脚本。但是,可能有一种方法可以关闭它,它是非常多比其他选择更好。

希望这能有所帮助。干杯!

答案2

睡眠后尝试执行以下命令:

sudo systemctl restart network-manager.service 
sudo ifconfig wlx8c882b131d8 up
sudo rfkill unblock all

更改wlx8c882b131d8为您自己的 WiFi 适配器的名称。如果此方法有效,那么您可以创建一个 systemd 服务,该服务将在您从睡眠模式唤醒后启动,并自动执行上述操作。

此外,在某些情况下,也可以取出/插入电池。

此外,在未屏蔽的设备上启用/禁用 WiFi 的组合键是否有效?如果没有,请找出原因。

而且,正如没有人建议的那样(参考

gsettings list-recursively | less

您可以通过输入 找到有关飞行模式的条目/rfkill。复制该行并在新的命令行上使用 gsettings “set” 参数,但将“true”更改为“false”:

gsettings set org.gnome.settings-daemon.plugins.rfkill active false

但是,之前建议的命令也有其缺点。因此,您可以尝试从同一参考资料中获取的下一个建议的解决方案:

我的 HP 250 G5 也遇到了同样的问题。对我来说,这是因为盖子e058/e057在关闭/打开时发送扫描代码导致的。

由于某种原因,GNOME 决定将其与飞行模式打开相对应。正如 ropid 提到的,您可以通过禁用 GNOME 的 rfkill 插件来修复它,但这也会阻止通过 GNOME 设置启用/禁用蓝牙。

我设法通过映射e058/e057keycode 245 (显示关闭)来解决这个问题

在关闭和打开盖子之前使用{ journalctl -f },看看关闭盖子是否模拟任何按键。日记条目还应该告诉您按键的扫描码(e058 & e057就我而言)

然后使用{ setkeycodes [SCANCODE] [KEYCODE] }将盖子发送的扫描码映射到所需的键(在我的情况下,我使用了setkeycodes e058 245 e057 245)。如果您不想将其映射到 DISPLAY OFF,您可以在以下位置找到其他键码列表 /usr/include/linux/input-event-codes.h

如果问题已修复,则通过创建并启用 systemd 单元文件使其持久化,/etc/systemd/system/我使用的该文件如下所示:

[Unit]
Description=Fix WiFi off on lid close

[Service]
ExecStart=/usr/bin/setkeycodes e058 245 e057 245

[Install]
WantedBy=multi-user.target

答案3

这是 Linux 内核中 Intel HID 驱动程序的一个错误。修复方法如下:

  • 下载 Linux 内核源代码

  • 在文本编辑器中打开文件 drivers/platform/x86/intel/hid.c

  • 搜索字符串“KEY_RFKILL”。应该会找到如下一行:

    { KE_KEY, 8, { KEY_RFKILL }},

  • 删除字符串“KEY_RFKILL”。该行现在应如下所示:

    { KE_KEY, 8, { } },

  • 编译并安装内核,当您关闭笔记本电脑/将其置于平板电脑模式时,它应该不再打开飞行模式。

干杯!

编辑:由于这是英特尔 HID 实现的问题,这意味着此错误可能不存在于 AMD 型号上。有 AMD 机器的人可以确认这一点吗?

相关内容