在Linux(Fedora/Gnome/XOrg)环境下实现游戏分屏运行的技术咨询
嗨,我完全懂你的需求——想在Fedora的Gnome/Xorg环境下,不用切换到平铺窗口管理器,就能实现类似Windows上Universal Split Screen的效果,让两个Terraria实例在同一个窗口里并排运行,而不是像之前用Xephyr那样得到两个带独立装饰的窗口。下面给你几个实用的思路和具体操作步骤:
方案一:优化Xephyr,用容器窗口整合虚拟显示器
你之前的Xephyr思路其实可以升级,通过一个容器窗口把两个Xephyr实例嵌进去,就能实现单窗口分屏的效果:
先安装必要工具:
在Fedora终端里执行以下命令安装xephyr(虚拟X服务器)和wmctrl(窗口控制工具):sudo dnf install xorg-x11-server-Xephyr wmctrl创建一个空白容器窗口:
先启动一个临时的xterm窗口作为容器,然后用wmctrl调整它的大小到你需要的总分辨率(比如要放下两个1920x600的实例,就设成3840x600):xterm -name SplitScreenContainer & sleep 1 wmctrl -r SplitScreenContainer -e 0,0,0,3840,600获取容器窗口ID并嵌入Xephyr实例:
先拿到刚才创建的容器窗口ID,再启动两个Xephyr实例,分别指定它们在容器里的位置:# 获取容器窗口ID CONTAINER_ID=$(wmctrl -l | grep SplitScreenContainer | awk '{print $1}') # 左侧Xephyr实例(分辨率1920x600,位置左上角) Xephyr -br -ac -noreset -screen 1920x600 -parent $CONTAINER_ID -geometry +0+0 :1 & # 右侧Xephyr实例(分辨率1920x600,位置左边缘+1920像素) Xephyr -br -ac -noreset -screen 1920x600 -parent $CONTAINER_ID -geometry +1920+0 :2 &如果想要上下分屏,只需要把第二个Xephyr的
+1920+0改成+0+600就可以了。在虚拟显示器里启动Terraria:
最后分别在两个虚拟X服务器上启动游戏:DISPLAY=:1 /path/to/terraria & DISPLAY=:2 /path/to/terraria &这样两个游戏实例就会在同一个容器窗口里并排显示,没有各自的窗口装饰,完美模拟分屏效果。
方案二:无装饰窗口+精准定位(轻量化方案)
如果Terraria支持无边框运行(Linux下可以试试添加-borderless启动参数,或者右键游戏窗口标题栏选择“去除装饰”),可以直接用窗口管理工具把两个游戏窗口精准定位到屏幕的左右半区:
启动第一个游戏实例并定位到左半屏:
/path/to/terraria -borderless & sleep 2 # 给游戏启动留一点时间 wmctrl -r Terraria -e 0,0,0,1920,1080这里的
1920,1080是左半屏的分辨率,根据你实际的屏幕分辨率调整(比如你的屏幕是1920x1080,想要上下分屏就改成1920,540)。启动第二个游戏实例并定位到右半屏:
/path/to/terraria -borderless & sleep 2 wmctrl -r Terraria -e 0,1920,0,1920,1080这种方法不需要虚拟X服务器,直接操作原生窗口,运行起来更流畅。
方案三:用Xinerama合并虚拟显示器
如果你愿意稍微配置一下Xorg,Xinerama可以把多个虚拟显示器合并成一个逻辑屏幕,让游戏分别在不同的虚拟显示器上运行,实现无缝分屏:
编辑Xorg配置文件:
创建一个新的Xorg配置文件/etc/X11/xorg.conf.d/20-xinerama.conf,内容如下(注意把Device改成你的显卡设备名,可用lspci | grep VGA查看):Section "ServerLayout" Identifier "XineramaLayout" Screen 0 "Screen0" 0 0 Screen 1 "Screen1" RightOf "Screen0" Option "Xinerama" "1" EndSection Section "Monitor" Identifier "Monitor0" EndSection Section "Monitor" Identifier "Monitor1" EndSection Section "Screen" Identifier "Screen0" Device "Card0" # 替换成你的显卡设备ID Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Viewport 0 0 Depth 24 Modes "1920x1080" EndSubSection EndSection Section "Screen" Identifier "Screen1" Device "Card0" Monitor "Monitor1" DefaultDepth 24 SubSection "Display" Viewport 0 0 Depth 24 Modes "1920x1080" EndSubSection EndSection重启Xorg并启动游戏:
重启Xorg后,你会得到一个合并后的逻辑屏幕(比如3840x1080),然后分别在两个虚拟屏幕上启动游戏:DISPLAY=:0.0 /path/to/terraria & DISPLAY=:0.1 /path/to/terraria &这种方法下两个游戏窗口会无缝排列,就像在一个大显示器上的左右两半,体验更接近真实的分屏。
备注:内容来源于stack exchange,提问作者frans




