我想在 X11 中制作一个可热插拔的虚拟监视器。基本上我想要的是,只有当没有屏幕连接到设备时,虚拟监视器才应该存在。如果至少连接了一个屏幕,则显示器不应该存在。即使系统已经启动,也应该发生这种情况,例如:
启动时没有连接显示器,2 小时后连接一个显示器,再过 3 小时后显示器断开连接:前 2 个小时应该有一个假显示器。连接显示器后,假显示器应该消失。再过 3 个小时后,由于现在没有显示器连接到系统,假显示器应该再次出现。
我正在运行 Fedora,但最好想要一个可以在大多数发行版上运行的解决方案。
我发现的所有解决方案要么始终插入虚拟显示器,要么仅当系统在启动时未检测到显示器时才连接,之后则不会连接。
我添加了我在搜索中找到的内容:
答案1
我是这样做的:
创建一个xorg.conf
文件,我将其放在/root/
:
Section "Device"
Identifier "Configured Video Device"
Driver "dummy"
VideoRam 256000
EndSection
Section "Monitor"
Identifier "Configured Monitor"
HorizSync 28.0-80.0
VertRefresh 48.0-75.0
Modeline "1920x1080_60.00" 172.80 1920 2040 2248 2576 1080 1081 1084 1118 -HSync +Vsync
EndSection
Section "Screen"
Identifier "Default Screen"
Monitor "Configured Monitor"
Device "Configured Video Device"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1920x1080_60.00"
EndSubSection
EndSection
该脚本每 5 秒检查一次显示器是否已连接(或断开连接),并在状态改变时将配置文件复制(或删除)到 xorg 的 conf.d 文件夹/从 xorg 的 conf.d 文件夹复制:
#!/bin/bash
# Change according to your needs
XORG_CONF_SOURCE="/root/xorg.conf"
XORG_CONF_DEST="/etc/X11/xorg.conf.d/xorg.conf"
CONN_STATUS=""
# Function to check and switch displays
switch_display() {
if check_monitor_connected; then
if [ "$CONN_STATUS" != "yes" ]; then
# Disable the dummy display
echo Monitor connected
rm $XORG_CONF_DEST
service display-manager restart
CONN_STATUS="yes"
fi
else
if [ "$CONN_STATUS" != "no" ]; then
# Enable the dummy display
echo Monitor disconnected
cp $XORG_CONF_SOURCE $XORG_CONF_DEST
service display-manager restart
CONN_STATUS="no"
fi
fi
}
# Function to check if a monitor is connected
check_monitor_connected() {
for card in /sys/class/drm/card*; do
if [ -e "$card/status" ]; then
status=$(cat "$card/status")
if [ "$status" = "connected" ]; then
return 0 # Monitor connected
fi
fi
done
return 1 # No monitor connected
}
# Continuous loop to monitor for changes
while true; do
switch_display
# Check every 5 seconds for changes
sleep 5
done