可以root测试显示器是否连接?

Too*_*rot 6 monitors

当我合上笔记本电脑的盖子时,我使用脚本/etc/acpi来关闭屏幕 ( xset dpms force off)。现在我希望它在连接外部显示器时表现不同(将亮度设置为零)。我知道我可以测试它是否与 连接xrandr,但是脚本是由 root 运行的,而 xrandr 依赖于某个 X-session。有没有办法让 root 测试监视器是否已连接,而不管 X 会话如何?我正在使用 Arch Linux。

slm*_*slm 5

方法#1 - edid 解码

\n\n

您可以使用edid-decode查看连接了哪些监视器。这是来自我的 Ubuntu 16.04 系统,但这也适用于 Fedora 28 和 CentOS 7.x。

\n\n

笔记:这一特定系统有两个视频端口,我使用的是 VGA 端口。

\n\n

这里显示器已插入:

\n\n
$ ls /sys/class/drm/*/edid | xargs -n 1 edid-decode | grep Manufacturer:\nManufacturer: DEL Model a071 Serial Number 844247885\nManufacturer: @@@ Model 0 Serial Number 0\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是当我拔掉 VGA 显示器时的情况:

\n\n
$ ls /sys/class/drm/*/edid | xargs -n 1 edid-decode | grep Manufacturer:\nManufacturer: @@@ Model 0 Serial Number 0\nManufacturer: @@@ Model 0 Serial Number 0\n
Run Code Online (Sandbox Code Playgroud)\n\n

在这里它被重新插入:

\n\n
$ ls /sys/class/drm/*/edid | xargs -n 1 edid-decode | grep Manufacturer:\nManufacturer: DEL Model a071 Serial Number 844247885\nManufacturer: @@@ Model 0 Serial Number 0\n
Run Code Online (Sandbox Code Playgroud)\n\n

方法#2 - cat sysfs

\n\n

如果您查看/sys此处列出的显示端口/sys/class/drm

\n\n
$ ls /sys/class/drm\ncard0  card0-DP-1  card0-HDMI-A-1  controlD64  renderD128  version\n
Run Code Online (Sandbox Code Playgroud)\n\n

显示器的显示端口为card0-DP-1(VGA) 和card0-HDMI-A-1(HDMI)。如果您查看每个目录,就会发现有一个名为status. 如果你cat此文件,您可以看到端口的状态以及监视器是否已连接。

\n\n

与上面相同的测试,插入:

\n\n
$ cat /sys/class/drm/card0-DP-1/status\nconnected\n
Run Code Online (Sandbox Code Playgroud)\n\n

拔掉插头:

\n\n
$ cat /sys/class/drm/card0-DP-1/status\ndisconnected\n
Run Code Online (Sandbox Code Playgroud)\n\n

参考

\n\n\n