折腾了好久终于搞好了这个,说说这个作用吧
对于一般的电脑,如果不插入显示屏,那么显卡就不干活,功耗等会压制的非常低,同时桌面环境无法使用;而接入了显示屏后,既要考虑能耗,被偷看等问题,修改分辨率刷新率又成为新问题。总不能专门为了远程连接整一个4k屏幕吧(雾)
常见的解决方案可能有买一个显卡欺骗器,显卡欺骗器简单直接,插入后模拟显示屏,完事。对于Windows办公,很多人也喜欢配合向日葵远控,效果还真不错。不过问题是显卡欺骗器一般只支持一种协议+刷新率,不能调节,也会占用一个HDMI/DP接口,也需要花钱买,同时生成这种东西多半为小厂家,风险不可控。
这里我使用的是虚拟屏幕+VNC远控,支持DIV分辨率,远控效果好延迟低,也避免了显示器功耗。
在Ubuntu中创建一个虚拟显示器并通过其他设备访问,可以通过以下步骤来实现:
前提:被控主机:安装好ssh,Ubuntu系统(其它系统类似),自己主机:下载VNC_Viewer
1. 安装虚拟显示器驱动
首先,安装虚拟显示器驱动(如xserver-xorg-video-dummy
),这是一个虚拟的显卡驱动程序,允许创建一个虚拟显示器。
sudo apt update
sudo apt install xserver-xorg-video-dummy
2. 配置Xorg以使用虚拟显示器
创建或编辑Xorg配置文件,以添加一个虚拟显示器。编辑/etc/X11/xorg.conf
文件(如果没有此文件,可以新建一个),并添加以下内容:
Section "Device"
Identifier "Configured Video Device"
Driver "dummy"
EndSection
Section "Monitor"
Identifier "Configured Monitor"
HorizSync 28.0-80.0
VertRefresh 48.0-75.0
EndSection
Section "Screen"
Identifier "Default Screen"
Monitor "Configured Monitor"
Device "Configured Video Device"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1920x1080"
EndSubSection
EndSection
在Modes
字段中,你可以根据需要设置分辨率,例如 "1920x1080"
或 "1280x720"
等。
3. 重启X服务器
在编辑好配置文件后,重启X服务器以应用更改:
sudo systemctl restart display-manager
4. 安装并配置VNC服务器
为了远程访问这个虚拟显示器,可以安装VNC服务器。TigerVNC
或x11vnc
是常用的VNC服务器。
安装TigerVNC
sudo apt install tigervnc-standalone-server
配置文件
nano ~/.vnc/xstartup
#!/bin/sh
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
. /etc/profile.d/apps-bin-path.sh
. /etc/profile.d/xdg_dirs_desktop_session.sh
export GNOME_SHELL_SESSION_MODE=ubuntu
XAUTHORITY=$HOME/.Xauthority
export XAUTHORITY
export DISPLAY=:1
export DRI_PRIME=1
/usr/bin/gnome-session --disable-acceleration-check
缺啥库补啥库
从这里往后,都需要用SSH远控操作,这是5901转发本机,-p为指定ssh端口,默认为22,我这里自己修改了
ssh -L 5901:localhost:5901 djs@10.80.168.94 -p 2222
启动VNC服务器
配置VNC服务器的显示器设置,例如,拥有一个2k屏
vncserver :1 -geometry 2560x1440 -depth 24
如果是这样,那你就成功了。如果被占用,就vncserver kill :1,杀了
5. 远程访问
打开VNC_Viewer,配置VNC Server:
localhost:5901
输入连接即可
建议设置永不息屏,因为我登录时候卡过,bug随机触发,原理未知
想以后再外接显卡,感觉更酷!
6. 配置开机启动(可选)
为了每次启动时都自动运行虚拟显示器和VNC服务,可以将VNC服务器添加到系统启动项中。创建一个systemd服务:
sudo nano /etc/systemd/system/vncserver@.service
并添加以下内容:
[Unit]
Description=Sta rt TigerVNC server at startup
After=syslog.target network.target
[Service]
Type=forking
User=your_username
PAMName=login
PIDFile=/home/your_username/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver :%i -geometry 1920x1080 -depth 24
ExecStop=/usr/bin/vncserver -kill :%i
[Install]
WantedBy=multi-user.target
将your_username
替换为你的用户名。然后启用并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable vncserver@1.service
sudo systemctl start vncserver@1.service
完成后,VNC服务将自动启动,并可以通过其他设备访问虚拟显示器。
对于直接连接显示屏
/usr/bin/x11vnc -auth /run/sddm/xauth_LwBQCn -display :0 -forever -loop -noxdamage -bg