Linux虚拟桌面[未完成]

[Manual]

After plugging in the hardware monitor again, it will not display, so it needs to be disabled
Temporarily cancel virtual display and restart

sudo mv /etc/X11/xorg.conf /etc/X11/xorg.conf.backup
reboot

Modify back to virtual display

sudo mv /etc/X11/xorg.conf.backup /etc/X11/xorg.conf
reboot

[automatic] Failed

Automatic Script Processing - Virtual and Physical Automatic Switching

xrandr --listmonitors

That's output.

Monitoring: 2
0:+* HDMI-1 1920/480x1080/270+0+0 HDMI-1
1: +HDMI-2 1920/480x1080/270+0+0 HDMI-2

详细步骤

步骤1:备份默认配置(如果尚未备份)

sudo cp /etc/X11/xorg.conf /etc/X11/xorg.conf.backup

步骤2:创建虚拟显示器配置文件

/etc/X11/xorg.conf.d/ 目录下创建一个名为 99-virtual-display.conf 的文件,并使用 sudo 权限编辑它:

sudo nano /etc/X11/xorg.conf.d/99-virtual-display.conf

在编辑器中输入以下内容作为虚拟显示器的配置:

Section "Device"
Identifier "dummy"
Driver "dummy"
Option "DummyDevice" "true"
EndSection

Section "Monitor"
Identifier "dummy"
HorizSync 5.0 - 1000.0
VertRefresh 5.0 - 200.0
Modeline "800x600" 24.0 800 832 928 1024 600 604 608 624
EndSection

Section "Screen"
Identifier "dummy"
Device "dummy"
Monitor "dummy"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "800x600"
EndSubSection
EndSection

步骤3:创建udev规则

/etc/udev/rules.d/ 目录下创建一个名为 99-monitor-hotplug.rules 的文件,并使用 sudo 权限编辑它:

sudo nano /etc/udev/rules.d/99-monitor-hotplug.rules

在编辑器中输入以下内容作为 udev 规则:

ACTION=="change", SUBSYSTEM=="drm", ENV{HOTPLUG}=="1", RUN+="/usr/bin/systemctl start monitor-config.service"

步骤4:创建 systemd 服务
/etc/systemd/system/ 目录下创建一个名为 monitor-config.service 的文件,并使用 sudo 权限编辑它:

sudo nano /etc/systemd/system/monitor-config.service

在编辑器中输入以下内容作为systemd服务:

[Unit]
Description=Configure monitors based on presence
Requires=display-manager.service
After=display-manager.service

[Service]
Type=simple
ExecStart=/usr/local/bin/configure-monitors.sh
Restart=no

[Install]
WantedBy=multi-user.target

步骤5:编写监控显示器状态的脚本
创建一个名为 /usr/local/bin/configure-monitors.sh 的脚本文件,并使用 sudo 权限编辑它:

sudo nano /usr/local/bin/configure-monitors.sh

将以下内容复制到脚本文件中:

#!/bin/bash

HDMI_STATUS=$(cat /sys/class/drm/card1-HDMI-A-1/status 2>/dev/null)

if [ "$HDMI_STATUS" = "connected" ]; then
    echo "HDMI 显示器已连接"
    sudo ln -sf /etc/X11/xorg.conf.d/99-virtual-display.conf /etc/X11/xorg.conf
    # 可以在此启动 RustDesk + 设置 DISPLAY
else
    echo "HDMI 显示器未连接"
    sudo rm -f /etc/X11/xorg.conf
    # 启动虚拟显示器、Xvfb 或 X dummy 等
fi

sudo systemctl restart display-manager

exit 0

步骤6:赋予脚本执行权限

sudo chmod +x /usr/local/bin/configure-monitors.sh

步骤7:启用并启动 systemd 服务

sudo systemctl daemon-reload
sudo systemctl enable monitor-config.service
sudo systemctl start monitor-config.service
posted @ 2025-04-19 11:14  Wenqingyu  阅读(43)  评论(0)    收藏  举报