我需要编写一个脚本来检查本地网络中机器上的视频相关内容,例如
- 显示器是否已插入?
- 视频驱动程序是否是最新的并且适合硬件?
- Xorg 正在运行吗?
但是,我无法找到一种可靠的方法来判断监视器是否通过本地 ssh 连接插入。例如,如果我从机器 A ssh 到同一子网上的另一台机器 B,该xrandr
工具将返回有关插入机器 A 而不是机器 B 的监视器的信息。我尝试了许多其他工具,但都给出了相同的效果。如何确定我正在探测插入到我所连接的计算机上的监视器,而不是正在运行 shell 会话的计算机?
答案1
禁用 X11 转发(使用-x
切换到ssh
)并设置机器 B 的 DISPLAY 环境变量。例如,这将告诉您机器 B 上 :0 的设置:
ssh -x machineB
DISPLAY=:0 xrandr
答案2
名为“get-edid”的工具可让您从显示器读取识别信息阅读 edid 网站 扩展显示识别数据
和“parse-edid”从 get-edid 创建,正确的 X 配置监视器部分:
我的机器上的示例:
# get-edid | parse-edid
parse-edid: parse-edid version 2.0.0
get-edid: get-edid version 2.0.0
Performing real mode VBE call
Interrupt 0x10 ax=0x4f00 bx=0x0 cx=0x0
Function supported
Call successful
VBE version 300
VBE string at 0xc01f0 "ATI ATOMBIOS"
VBE/DDC service about to be called
Report DDC capabilities
Performing real mode VBE call
Interrupt 0x10 ax=0x4f15 bx=0x0 cx=0x0
Function supported
Call successful
Monitor and video card combination does not support DDC1 transfers
Monitor and video card combination supports DDC2 transfers
0 seconds per 128 byte EDID block transfer
Screen is not blanked during DDC transfer
Reading next EDID block
VBE/DDC service about to be called
Read EDID
Performing real mode VBE call
Interrupt 0x10 ax=0x4f15 bx=0x1 cx=0x0
Function supported
Call successful
parse-edid: EDID checksum passed.
# EDID version 1 revision 3
Section "Monitor"
# Block type: 2:0 3:fd
# Block type: 2:0 3:fc
Identifier "Acer H233H"
VendorName "ACR"
ModelName "Acer H233H"
# Block type: 2:0 3:fd
HorizSync 30-83
VertRefresh 56-75
# Max dot clock (video bandwidth) 170 MHz
# Block type: 2:0 3:fc
# Block type: 2:0 3:ff
# DPMS capabilities: Active off:yes Suspend:no Standby:no
Mode "1920x1080" # vfreq 60.000Hz, hfreq 67.500kHz
DotClock 148.500000
HTimings 1920 2008 2052 2200
VTimings 1080 1084 1089 1125
Flags "+HSync" "+VSync"
EndMode
# Block type: 2:0 3:fd
# Block type: 2:0 3:fc
# Block type: 2:0 3:ff
EndSection
您必须是 root 才能使用它们。 /etc/X11/xorg.conf 中没有写入任何内容