Dav*_*rks 9 display nvidia multiple-monitors suspend
问题:
在基于 Ubuntu 的笔记本电脑上,当我睡眠或断开外部显示器的电源,然后打开系统电源或重新连接显示器时,显示屏不亮。
穷人的解决方案:
我发现让外部显示器工作的唯一方法(除了重新启动)是从连接显示器切换到镜像显示器。一旦显示器启动,我就可以简单地取消对镜像显示的更改,显示器设置恢复,并且外部显示器照常工作。
申诉:
不幸的是,这会导致我的外部显示器上的窗口在桌面工作区中排列错误(这里是 PopOS,Ubuntu 20.10)。在镜像/取消过程之后重新安排工作区需要花费相当多的精力。
有希望的问题:
是否有任何命令行实用程序可以强制外部显示器重置,而无需从连接显示更改为镜像?
小智 7
我的笔记本电脑上的 PopOS 22.04 (jammy) 和外部 HDMI 显示器也遇到了类似的问题。这是一个一旦实施就会自动运行的解决方案。
whoami
您可以在非特权 shell 终端中运行来找出答案。在下面的命令中,当我指定 时USERNAME
,请将其替换为您的用户名。xrandr | grep ' connected'
(保留引号内的空格)并查看输出。第一列包含显示标识符。例如,我的内部显示器是eDP-1
,我的外部显示器是HDMI-1-0
。下面我将在我的脚本中使用这些值,如果它们不同,请用您的值替换它们。DISPLAY
变量:echo $DISPLAY
在非特权shell终端中运行即可查出。我的说:1
,所以我将在下面使用它。如果您的值不同,请替换:1
为您自己的值。/usr/lib/pm-utils/sleep.d/99_external_monitor_wake
:#!/bin/bash
DISPLAY=:1; export DISPLAY
case "$1" in
suspend | hibernate | pre)
# no operation
:
;;
resume | thaw | post)
# wakes the external monitor connected to the HDMI port
xrandr --output HDMI-1-0 --auto --left-of eDP-1 --primary
sleep 3
xrandr --output HDMI-1-0 --auto --left-of eDP-1 --primary
;;
esac
exit 0
Run Code Online (Sandbox Code Playgroud)
您需要根据您的设置调整此脚本。
首先要改变的是DISPLAY=:1
。这设置了DISPLAY
我们在0.2 节中找到的环境变量。多于。如果不同,请替换为您自己的值。
第二个要改变的是两条xrandr --output HDMI-1-0 --auto --left-of eDP-1 --primary
线。首先,您需要替换我们在0.1 节中找到的显示标识符。与你自己的价值观。我还将 HDMI 显示器设置在内部显示器的左侧,并将外部显示器设为主要显示器。您可能想替换--left-of
为--right-of
,并且您可能想省略该--primary
标志。通过键入内容来阅读 xrandr 的手册页man xrandr
以获取更多详细信息。请记住对两行命令进行相同的更改。
如果我上面指定的 3 秒不适合您,您还可以尝试睡眠时间。这有点像使用 AED(我知道我不是 EMT):先摇晃它,然后在它处于能够接收的状态时潜入第二个命令。
sudo chown USERNAME:USERNAME /usr/lib/pm-utils/sleep.d/99_external_monitor_wake
sudo chmod +x /usr/lib/pm-utils/sleep.d/99_external_monitor_wake
Run Code Online (Sandbox Code Playgroud)
您想要将用户替换USERNAME
为您自己的登录用户名(在0.0.0.0 节中找到)。多于。
/etc/systemd/system/wake-monitor.service
以在从睡眠状态恢复时触发此脚本:[Unit]
Description=Wake external monitor connected to HDMI after resuming from sleep, and when entering a display manager
After=sleep.target display-manager.service
StopWhenUnneeded=yes
[Service]
User=USERNAME
Type=oneshot
RemainAfterExit=no
ExecStart=/usr/lib/pm-utils/sleep.d/99_external_monitor_wake resume
[Install]
WantedBy=sleep.target display-manager.service
Run Code Online (Sandbox Code Playgroud)
您想要将用户替换USERNAME
为您自己的登录用户名(在0.0.0.0 节中找到)。多于。
我包含display-manager.service
在我的After
和中WantedBy
,因为当屏幕在没有活动后锁定时我遇到了同样的问题。如果您只需要修复从睡眠状态恢复的问题,则可以将其删除。
[Unit]
Description=Wake external monitor connected to HDMI after resuming from sleep, and when entering a display manager
After=sleep.target display-manager.service
StopWhenUnneeded=yes
[Service]
User=USERNAME
Type=oneshot
RemainAfterExit=no
ExecStart=/usr/lib/pm-utils/sleep.d/99_external_monitor_wake resume
[Install]
WantedBy=sleep.target display-manager.service
Run Code Online (Sandbox Code Playgroud)
就是这样!您应该能够挂起计算机,并在外部显示器正常工作的情况下醒来!
如果出现问题,您可以通过运行sudo systemctl status wake-monitor.service
并查看输出来调试服务。
有两件事要尝试:
有时,不带任何选项运行xrandr
会导致显示屏被探测并开始工作。
我在使用省电模式时遇到问题,无法唤醒一个屏幕而不是另一个屏幕,尤其是当一个屏幕断开连接一段时间时。发生这种情况时,请确保外接显示器已插入并通电,然后运行
xset dpms force off
Run Code Online (Sandbox Code Playgroud)
等待几秒钟,然后按一个键来取消屏幕空白。这可能会唤醒外部显示器。
可能需要将事情完全循环,并且需要延迟来让事情解决:
xset dpms force off; sleep 2; xset dpms force on
Run Code Online (Sandbox Code Playgroud)
自动等待可能不起作用,手动观看可能更有效。如果显示器在蓝屏/黑屏等状态之间交替,您可能需要在显示器处于其中一种状态时(例如当它是黑屏而不是蓝屏时)运行命令。
归档时间: |
|
查看次数: |
7515 次 |
最近记录: |