如何让 UPower 和电源子系统识别电源已插入?

如何让 UPower 和电源子系统识别电源已插入?

我使用的是 Xfce4,它有xfce4-power-manager用于视觉提示的,并且upower是核心支持包之一(我看到了/usr/lib/upower/upowerd正在运行的ps aux输出)。除此之外,它还pm-utils安装了,在日志中我看到它处于活动状态。我不确定这是否会引起任何争议,我肯定会在这里列出它以保证完整性。

该机器是 Acer Predator Helios 500 PH517-61-R0GX(AMD Ryzen)。在 ASUS ROG Strix GL702ZC(也是 AMD Ryzen 笔记本电脑,但使用的是 Ryzen 1700 而不是 Ryzen 2700)上也进行了完全相同的安装(实际上是相同的 SSD 棒)。我在使用 ASUS 时没有遇到这种问题。

# upower -d
Device: /org/freedesktop/UPower/devices/line_power_ACAD
  native-path:          ACAD
  power supply:         yes
  updated:              Sat 02 Mar 2019 10:08:52 PM PST (2442 seconds ago)
  has history:          no
  has statistics:       no
  line-power
    online:             no

Device: /org/freedesktop/UPower/devices/battery_BAT1
  native-path:          BAT1
  vendor:               PANASONIC
  model:                AP17C5P
  serial:               1409
  power supply:         yes
  updated:              Sat 02 Mar 2019 10:49:28 PM PST (6 seconds ago)
  has history:          yes
  has statistics:       yes
  battery
    present:             yes
    rechargeable:        yes
    state:               discharging
    energy:              73.1346 Wh
    energy-empty:        0 Wh
    energy-full:         74.074 Wh
    energy-full-design:  74.074 Wh
    energy-rate:         0 W
    voltage:             17.374 V
    percentage:          98%
    capacity:            100%
    technology:          lithium-ion

Daemon:
  daemon-version:  0.9.23
  can-suspend:     yes
  can-hibernate:   no
  on-battery:      yes
  on-low-battery:  no
  lid-is-closed:   no
  lid-is-present:  yes
  is-docked:       yes

请注意上面的电源online: no和电池state: discharge,尽管我写这篇文章时情况正好相反:交流适配器已插入,电池应该已充满电。这也是惯例,因为如果电池真的在放电,大约 1.5 小时后我就会没电。

现在UPower可以从子系统中获取其信息。我看到的是:

# cat /sys/class/power_supply/ACAD/online 
0
# cat /sys/class/power_supply/BAT1/status 
Discharging

即使我尝试强制将 CPU 频率调节器设置为performance,CPU 仍然会变得低沉:

# cat /proc/cpuinfo | grep MHz
cpu MHz     : 548.695
cpu MHz     : 548.572
cpu MHz     : 548.638
cpu MHz     : 548.658
cpu MHz     : 548.226
cpu MHz     : 548.899
cpu MHz     : 548.528
cpu MHz     : 548.477
cpu MHz     : 548.819
cpu MHz     : 548.440
cpu MHz     : 548.905
cpu MHz     : 548.263
cpu MHz     : 548.956
cpu MHz     : 548.645
cpu MHz     : 548.938
cpu MHz     : 548.666

实际上这甚至可能是不可能的,因为我认为最低是 1.5 GHz,但系统有时肯定会很慢。

我尝试使用acpi_osi=Linux内核启动参数,但似乎并没有改变这种情况。

非常有趣的是,dmesg我看到了一件有趣的事情,看起来在早期启动期间 ACPI 子系统检测到 AC 适配器确实已插入:

[    0.882383] ACPI: AC Adapter [ACAD] (on-line)
[    0.882416] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0
[    0.882420] ACPI: Power Button [PWRB]
[    0.882446] input: Sleep Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/input/input1
[    0.882449] ACPI: Sleep Button [SLPB]
[    0.882468] input: Lid Switch as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/input/input2
[    0.882472] ACPI: Lid Switch [LID]
[    0.882491] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input3
[    0.882500] ACPI: Power Button [PWRF]
[    0.882552] ACPI: Video Device [DGPU] (multi-head: yes  rom: no  post: no)
[    0.882745] acpi device:2a: registered as cooling_device0

(完整的 dmesg:https://pastebin.com/x4QRbSCR

我不知道什么时候情况会好转?是什么原因导致启动时正确的在线检测出现问题?

# uname -a
Linux asus 4.20.13 #2 SMP Sat Mar 2 17:03:50 PST 2019 x86_64 GNU/Linux

我安装了 acpid ( apt install acpid)。这通常对情况没有帮助,但我可以运行acpi_listen,当我断开交流适配器时,我会看到一堆消息。当我重新连接时,它没有声音。/sys/class/power_supply/*上面的读数保持不变。

答案1

我对 helios 500 和 manjaro 不充电的解决方法:

Linux XXX 5.2.0-1-MANJARO #1 SMP PREEMPT Sat Jun 22 23:22:07 UTC 2019 x86_64 GNU/Linux
  1. 未插入交流适配器就打开笔记本电脑
  2. 登录
  3. 连接交流适配器
  4. 执行以下命令:

echo "manual" > /sys/devices/pci0000:00/0000:00:03.1/0000:06:00.0/0000:07:00.0/0000:08:00.0/power_dpm_force_performance_level

echo 6 > /sys/devices/pci0000:00/0000:00:03.1/0000:06:00.0/0000:07:00.0/0000:08:00.0/pp_dpm_sclk

echo 4 > /sys/devices/pci0000:00/0000:00:03.1/0000:06:00.0/0000:07:00.0/0000:08:00.0/pp_dpm_mclk

执行完这三个命令后,充电 LED 开始发光,操作系统就知道交流适配器已插入。

我希望这能对某些人有所帮助。

答案2

基于Pawel Czmock 的回答Ubuntu 18.04 的工作解决方案是:

  • 列出可用频率 (pp_dpm_sclk)。为此,请以 sudo 身份执行:

    cd '/sys/devices/pci0000:00'
    DPM_SCLK=$(find . -name 'pp_dpm_sclk')
    echo 'Available SCLK frequencies:'
    cat "$DPM_SCLK"
    

    如果你在那里看到 1201Mhz,请继续下一部分。如果没有,你可以自己决定使用哪个频率(基于上面脚本的输出)并将其作为参数传递给下面的脚本

  • 应用所需的频率设置(默认为 1201Mhz 或传递参数,即1301兆赫
    以 sudo 身份执行:

    FREQUENCY="1201Mhz"
    
    if [ -n "$1" ]; then
        FREQUENCY="$1"
    fi
    
    ROOT='/sys/devices/pci0000:00'
    # Set manual level:
    DPM_LEVEL=$(find "$ROOT" -name 'power_dpm_force_performance_level')
    echo "Setting 'manual' level in $DPM_LEVEL"
    echo 'manual' > "$DPM_LEVEL"
    
    # Find frequency selector id:
    DPM_SCLK=$(find "$ROOT" -name 'pp_dpm_sclk')
    SCLK_VALUE=$(grep "$FREQUENCY" "$DPM_SCLK" | cut -d: -f1)
    if [ -z "$SCLK_VALUE" ]; then
        echo "$FREQUENCY not found in $DPM_SCLK"
        exit 1
    fi
    
    # Set frequency
    echo "Setting $FREQUENCY using id $SCLK_VALUE in $DPM_SCLK"
    echo "$SCLK_VALUE" > "$DPM_SCLK"
    
    # pp_dpm_mclk should get set automatically after pp_dpm_sclk is set
    

    执行此脚本后,CPU、GPU 开始以正常频率工作,Ubuntu 切换到“On-AC”模式,电源指示灯亮起

笔记:有时上述脚本会执行但不会设置这些值 - 在这种情况下注销和登录会有所帮助。

答案3

我有同样的笔记本电脑,也遇到了同样的问题。我已经联系了 ACPI 内核开发人员,但无法猜测我们是否会为交流电源提供适当的 ACPI 支持。“好”消息是,我至少找到了一种解决方法,让我们能够使用系统能够提供的更高性能。

以下是一些需要检查和尝试的事情:

  • 如果您启动时 CPU 频率卡在 ~500MHz,请尝试拔下交流适配器。有时需要多次尝试。这应该会将您启动到电池模式电源设置。我将 CPU 调节器设置为“按需”。

  • 我真的推荐 amdgpu-utils:https://github.com/Ricks-Lab/amdgpu-utils 您必须在 /etc/default/grub 中的 GRUB_CMDLINE_LINUX_DEFAULT= 行中添加“amdgpu.ppfeaturemask=0xffff7fff”并生成新配置,重新安装 grub,然后重新启动,但是一旦内核设置了该配置,您现在就可以对 Vega 56 进行大规模控制。(我们选择 AMD 是有原因的!开源驱动程序万岁!)

  • 我采用的让 GPU 加速的方法是将 P0 状态设置为更高的时钟(因为在“电池模式”下强制设置为该状态)。其中一个实用程序是 amdgpu-pac,它允许我们编辑 P0 状态。首先,以 root 身份运行“amdgpu-pac --execute_pac”并实时调整设置。(风扇读数为零,这是正常现象,因为我们的笔记本电脑不使用原装风扇。)功率上限为 120w,如果没有破解 BIOS,我们对此无能为力。0:Sclk P 状态应更改为更高的 Mhz 和 mV。小心!这就像超频一样。我们的安培数有限,因此我们不能将其设置为 P7:然后继续。我测试了 1201 Mhz 和 875 mV,这似乎对我有用。如果您找到更稳定、更好的组合,请告诉我。我保留了 Mclk,只是将“设置掩码:”改为“1,2,3”,这样它就不能使用 0 状态了。我尝试更改 0:状态,但它锁定了所有内容。将“电源性能模式”保留为 AUTO,我发现更改它没有任何区别。点击保存将立即应用它。我使用 Unigine 的 Heaven 基准来对事物进行压力测试(当前分数:极端情况下为 1761”)。一旦您有了喜欢的设置,请记下来,重新启动 amdgpu-pac 而不带参数并设置设置,现在当您点击保存时,它会生成一个 pac_writer_$$$$$.sh 供您在想要将 GPU 设置为性能模式时运行。如果您想回到省电模式,它还有助于生成具有原始设置的 reset.sh。就是这样。

使用这些技巧,我能够在 Linux 下以最佳性能运行这台笔记本电脑(大部分情况下)。如果幸运的话,ACPI 开发人员会听到我们的呼声,未来的 Linux 内核将简单地检测我们的 AC 适配器。祝你好运!

相关内容