freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Linux纯软件Sunshine与Moonlight极低延迟安卓副屏幕解决方案
N1nEmAn 2024-12-27 20:10:11 18247
所属地 山东省

发布本文的原因是,网上其他类似的配置方法都具有一定的局限性,比如需要显卡欺骗器、或者极其复杂需要其他开源软件,而本方案直接快捷,希望能直接帮助到大家(可能是因为自己比较懒惰)。

本文将介绍如何通过 Sunshine + Moonlight在 Linux 下将安卓平板设置为一块极低延迟的扩展屏幕。基于我个人的实际配置,以下是详细步骤和优化方案。


硬件环境

以下是我的设备配置(仅供参考):

OS: Arch Linux x86_64  
Host: ThinkBook 16 G4+ ARA  
Kernel: Linux 6.12.6-zen1-1-zen  
WM: bspwm (X11)  
CPU: AMD Ryzen 7 6800H  
GPU: AMD Radeon 680M (Integrated)  
Display (Internal): 2560x1600 @ 120 Hz  
Display (External-1): 3840x2160 @ 50 Hz  
Display (External-2): 2880x1800 @ 144 Hz (Android tablet as second screen)  

第一步:安装 Sunshine

在电脑上安装 Sunshine

在 Arch Linux 下可以直接安装 Sunshine:

yay -S sunshine

安装完成后,启动 Sunshine:

systemctl start sunshine

打开浏览器访问 https://localhost:47990/进入 Sunshine 的管理页面,首次使用需要设置登录密码。
image-20241227154514736.png

Applications页面配置do commandundo command,如下所示:

  • do commandundo command

    xrandr --output DisplayPort-1 --mode 2880x1800_144.00 --rate 144.00
    

以上命令将在后续部分详细介绍。


第二步:平板安装 Moonlight

在安卓平板上,通过 Google Play 或其他渠道安装 Moonlight。安装完成后,你可以直接在设置中调整分辨率和刷新率,以达到最佳显示效果。


第三步:Linux 配置屏幕

在 Linux 中,我们通过xrandr工具来管理显示器。

1. 查看当前显示器信息

执行以下命令查看所有连接的显示器及分辨率信息:

xrandr

我的设备输出如下:

Screen 0: minimum 320 x 200, current 9280 x 2160, maximum 16384 x 16384
eDP connected primary 2560x1600+0+0 (normal left inverted right x axis y axis) 344mm x 215mm
   2560x1600    120.02*+  60.03  
HDMI-A-0 connected 3840x2160+2560+0 (normal left inverted right x axis y axis) 600mm x 340mm
   3840x2160     60.00 +  50.00    
DisplayPort-0 disconnected (normal left inverted right x axis y axis)
DisplayPort-1 disconnected 2880x1800+6400+41 (normal left inverted right x axis y axis) 0mm x 0mm
   2880x1800_144.00  95.03*
DisplayPort-2 disconnected (normal left inverted right x axis y axis)
DisplayPort-3 disconnected (normal left inverted right x axis y axis)
DisplayPort-4 disconnected (normal left inverted right x axis y axis)
DisplayPort-5 disconnected (normal left inverted right x axis y axis)
DisplayPort-6 disconnected (normal left inverted right x axis y axis)

通过xrandr确定平板所使用的 DisplayPort-1 接口。平板的分辨率为 2880x1800,支持 144Hz

2. 添加新的分辨率模式

运行以下命令为平板显示器添加自定义分辨率模式:

cvt 2880 1800 144

输出类似以下内容:

# 2880x1800 144.00 Hz (CVT 2.60M9) hsync: 188.47 kHz; pclk: 711.00 MHz
Modeline "2880x1800_144.00"  711.00  2880 3128 3448 4016  1800 1803 1811 1863 -hsync +vsync

然后执行以下命令:

xrandr --newmode "2880x1800_144.00" 711.00 2880 3128 3448 4016 1800 1803 1811 1863 -hsync +vsync
xrandr --addmode DisplayPort-1 2880x1800_144.00

配置完成后,可以通过xrandr启用该模式:

xrandr --output DisplayPort-1 --mode 2880x1800_144.00 --rate 144.00

3. 配置 Sunshine 的命令

将上述xrandr命令填入 Sunshine 的 do commandundo command中:

  • do command:

    xrandr --output DisplayPort-1 --mode 2880x1800_144.00 --rate 144.00
    
  • undo command:

    xrandr --output DisplayPort-1 --off
    

4. 桌面管理器重启 (可选)

如果像我一样使用 bspwm 桌面管理器,可以通过以下命令快速重启管理器,刷新屏幕布局:

bspc wm -r

第四步:使用 ARandR 快速调整屏幕位置

ARandR 是一个图形化工具,可以方便地调整屏幕布局。

安装 ARandR

在 Arch Linux 下安装 ARandR:

sudo pacman -S arandr

打开 ARandR 后,可以通过拖拽的方式调整屏幕的位置和排列。例如,将平板拖动到主显示器的右侧或其他位置。

image-20241227155052673.png

点击右上角保存按钮:

image-20241227155113975.png

保存到相应位置,例如~/.screenlayout/myscreen.sh

image-20241227155127657.png

将生成的脚本添加到系统启动项中,以便每次启动自动应用。

我的屏幕启动脚本

以下是我的屏幕启动脚本内容:

cvt 2880 1800 144
xrandr --newmode "2880x1800_144.00" 711.00 2880 3128 3448 4016 1800 1803 1811 1863 -hsync +vsync
xrandr --addmode DisplayPort-1 2880x1800_144.00
sh ~/.screenlayout/myscreen.sh

第五步:平板与电脑连接

完成上述配置后,打开 Moonlight,搜索 Sunshine 提供的设备(你的电脑)。按照提示输入 PIN 码完成配对。

连接成功后,平板即可作为一块独立的扩展屏幕使用,分辨率、刷新率根据你的设置进行应用。

连接后的效果如下图所示:

125c8d57772867f0c7c7a6fed19761a3_720.jpg


总结

通过 Sunshine 和 Moonlight,结合 xrandr 和 ARandR 工具,我们就可以直接在 Linux 下实现一套极低延迟的安卓平板副屏方案。这种方案不仅延迟极低,且分辨率和刷新率完全可控,非常适合对流畅度和画质要求较高的用户。

# 开源安全工具
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 N1nEmAn 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
N1nEmAn LV.3
github.com/N1nEmAn
  • 7 文章数
  • 24 关注者
[glibc2.23源码]阅读源码&调试,找出free_hook-0x13分配失败的原因
2023-08-05
[Pwn之路]根据所给库,获得远程同环境——使用patchelf的正确姿势
2023-07-31
[Pwn之路] 欢迎来到堆攻击的世界——简单堆溢出原理和例题
2023-07-26
文章目录