我使用的是 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
- 未插入交流适配器就打开笔记本电脑
- 登录
- 连接交流适配器
- 执行以下命令:
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 适配器。祝你好运!