pm-utils:挂起脚本中没有网络?

C-O*_*tto 8 linux debian power-management

我想/etc/pm/suspend.d/在允许系统挂起之前放置一个需要网络访问(非常短的时间)的脚本。但是,即使使用名为“001_something”的脚本/etc/pm/suspend.d//usr/lib/pm-utils/sleep.d/我也无法访问任何网络。这似乎在脚本运行之前被禁用。

为什么网络被禁用?我怎样才能启用它?

另外,我无法使用 pm-suspend.log in /var/log。似乎一旦系统恢复,挂起部分的文件就会被覆盖?

在 中观察到以下情况daemon.log

Feb 7 22:09:04 zenbook NetworkManager[3606]: <info> sleep requested (sleeping: no enabled: yes)·
Feb 7 22:09:04 zenbook NetworkManager[3606]: <info> sleeping or disabling...·
Feb 7 22:09:04 zenbook NetworkManager[3606]: <info> (wlan0): now unmanaged·
Feb 7 22:09:04 zenbook NetworkManager[3606]: <info> (wlan0): device state change: activated -> unmanaged (reason 'sleeping') [100 10 37]·
Feb 7 22:09:04 zenbook NetworkManager[3606]: <info> (wlan0): deactivating device (reason 'sleeping') [37]·
Run Code Online (Sandbox Code Playgroud)

我正在使用带有 Gnome 3 的 Debian 测试。

编辑:问题与 pm-utils 无关。据我所知,NetworkManager 禁用网络(在 nm-manager.c:do_sleep_wake 中)。我还不知道如何解决这个问题。请参阅NetworkManager:发送系统进入睡眠状态时禁用网络

slm*_*slm 7

1. 怪癖?

首先,我会确认您的挂起功能正常。查看 quirks 页面并确认您的挂起功能正常运行,而不仅仅是看起来运行正常。

2. 您的 001_something 脚本是否可执行?

检查以确保您的001_something脚本是可执行的!

% chmod +x 001_something
Run Code Online (Sandbox Code Playgroud)

3. 你的 001_something 脚本看起来正确吗?

检查以确保您的脚本符合pm-utils预期。

示例脚本

#!/bin/bash
case "$1" in
    hibernate|suspend)
        ACTION BEFORE SUSPEND/HIBERNATE
        ;;
    thaw|resume)
        ACTION AFTER RESUME
        ;;
    *)
        ;;
esac
exit $?
Run Code Online (Sandbox Code Playgroud)

注意:您是否hibernate|suspend在 case/switch 语句的正确部分尝试使用网络?

4. .d 目录中的文件是否正常工作(/etc/pm/suspend.d/ 或 /usr/lib/pm-utils/sleep.d/)?

接下来,我将确认您的001_something脚本实际上被挂起/休眠正确接收,方法是让它简单地将某个字符串回显到文件中,以便您知道它正在工作。

echo "yup I'm working" > /tmp/pmck_`date +%Y-%T`.log
Run Code Online (Sandbox Code Playgroud)

然后,您应该会看到诸如pmck_2013-16:08:11.login 的文件/tmp

5. /var/log?

如果上面的.d目录正在运行,我会制作一个001_something并将/var/log/pm-suspend.log您认为被覆盖的文件复制到 下的其他文件中/tmp,这样您至少可以确认日志记录是正确的。这可能会让您更深入地了解正在发生的事情。

cp /var/log/pm-suspend.log /tmp/pmlg_`date +%Y-%T`.log
Run Code Online (Sandbox Code Playgroud)

6.睡眠挂钩数?

您也可以将钩子文件的名称更改00-something001_something? 不确定,但手册页指示了这些值。

SLEEP HOOK ORDERING CONVENTION
       00 - 49
           User and most package supplied hooks. If a hook assumes that all of the usual services and userspace infrastructure
           is still running, it should be here.

       50 - 74
           Service handling hooks. Hooks that start or stop a service belong in this range. At or before 50, hooks can assume
           that all services are still enabled.

       75 - 89
           Module and non-core hardware handling. If a hook needs to load/unload a module, or if it needs to place non-video
           hardware that would otherwise break suspend or hibernate into a safe state, it belongs in this range. At or before
           75, hooks can assume all modules are still loaded.

       90 - 99
           Reserved for critical suspend hooks.
Run Code Online (Sandbox Code Playgroud)

7. 网络连接?

将以下内容添加到您的001_something脚本中:

TMP=/tmp/pmip_`date +%Y-%T`.log

# network status?
ip link show > $TMP

# dns working?
dig google.com +answer >> $TMP

# can we ping google?
ping -c 5 www.google.com >> $TMP
Run Code Online (Sandbox Code Playgroud)

8. pm-utils、HAL 和 Wheezy 的错误?

我遇到了这个 debian 错误报告,想知道这是否可能是您的问题的原因。该错误描述了 HAL 和 pm-utils 的问题。听起来像删除 HAL 修复了网络问题。

9. 更详细的 pm-utils 调试

此外,还有这个链接,它为特定于 Debian 的挂起/恢复问题提供建议。提到了一种通过PM_DEBUG=true/usr/lib/pm-utils/pm-functions文件中设置变量来增加 pm-utils 日志记录的方法。

摘抄

为 pm-utils 启用调试

挂起和恢复进程的日志在文件/var/log/pm-suspend.log 中。默认情况下,它包含适度冗长的信息。可以通过在文件 /usr/lib/pm-utils/pm-functions 的开头插入 line export PM_DEBUG=true 来启用更多信息以进行调试。

也许这可能有助于让您更深入地了解 pm-utils 正在发生的事情!

10. ACPI 在关闭网络之前pm-utils

如果问题似乎与 无关pm-utils,则可能是由于acpi。当您合上笔记本电脑的盖子时,acpi会触发一个事件,该事件具有与之关联的操作。

事件文件

% more /etc/acpi/events/lm_lid
event=button[ /]lid
action=/etc/acpi/actions/lm_lid.sh %e
Run Code Online (Sandbox Code Playgroud)

动作文件

% more /etc/acpi/actions/lm_lid.sh
#! /bin/sh

test -f /usr/sbin/laptop_mode || exit 0

# lid button pressed/released event handler

/usr/sbin/laptop_mode auto
Run Code Online (Sandbox Code Playgroud)

仔细观察,laptop_mode您会发现该工具负责做各种事情,其中​​之一是管理网络设备的状态。

notebook-mode 维护一个目录,/etc/laptop-mode/conf.d,类似于其他 unix 工具。其中有与以太网和无线网络设备相关的文件。

在主要配置中。文件, /etc/laptop-mode/laptop-mode.conf, 是打开更详细的消息传递的能力。也许这会进一步说明正在发生的事情?

VERBOSE_OUTPUT=1
Run Code Online (Sandbox Code Playgroud)

根据 OP 的反馈,对上述尝试的总结

1:就电池使用情况和笔记本上的睡眠 LED 而言,暂停有效。否则我不明白提到的网页应该如何帮助我找出答案。

2:是的。

3:看起来是正确的。

4:我得到了那些文件。

5:我得到了相应的日志文件,但这些对我没有帮助。

6: 00 而不是 001 没有显示任何区别。

7:本节中的内容仅测试网络连接。正如我的问题中所说,脚本一运行我就没有网络连接。wlan0 设备已关闭。日志文件:http : //paste.debian.net/231760

注意:我没有安装 dig(paste.debian.net 日志中的错误消息),但是很明显没有可用的网络访问(如上所述)。我可以通过检查 iwconfig、ip link show、ping 的输出来看到它已关闭…… perl 脚本是有问题的脚本。

顺便说一句,只要/usr/lib/pm-utils/bin/pm-action执行第一行(来自 upowerd),网络就已经关闭。

8: hal 已安装,删除它不会改变任何内容。