ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Ubuntu Server变身显示终端:视频播放、网页展示与远程访问配置

Ubuntu Server变身显示终端:视频播放、网页展示与远程访问配置 大家提到 Ubuntu Server第一反应就是“无头服务器”只能开着 SSH 敲命令。但实际需求里经常有反过来的时候有人想拿一台旧电脑装 Ubuntu Server 做家庭媒体终端想让它直接接电视播放视频有人想把它变成公司前台的展示屏固定显示某个网页还有人部署了基于长安链的商品溯源 DApp希望一台 Server 既能跑 Go 智能合约后端又能把溯源查询页面投到大厅大屏上。这些场景绕来绕去都指向同一个问题Ubuntu Server 到底怎么播放视频、怎么显示网页。先说结论默认装完的 Ubuntu Server 确实没有图形环境但通过补齐图形栈、安装浏览器和播放器、配置远程访问这三步完全能把它变成一台稳定可靠的“显示终端”。这篇文章我会按本地显示和远程访问两条路线来讲覆盖命令行配置、实际遇到的问题和排查方法适合想用 Ubuntu Server 做展示屏、媒体播放器或者远程桌面的小伙伴参考。1. 先从“无头”说起为什么 Server 默认看不到画面1.1 Ubuntu Server 与桌面版的本质差异很多人第一次遇到“装了 Ubuntu Server 插上显示器没画面”都会懵但这不是硬件坏了。Ubuntu Server 和 Ubuntu Desktop 安装的是两套完全不同的软件栈。桌面包默认带 X11/Wayland 图形服务、窗口管理器、桌面环境和一堆 GUI 工具而 Server 版为了追求轻量稳定只装内核、系统服务、SSH 和命令行工具。开机后走的是 tty 文本控制台你在显示器上看到的是黑底白字的登录提示而不是桌面。播放视频和显示网页这件事比大多数人想象中要“重”。视频播放至少需要 GPU 或软件解码、图形输出接口、音频输出通道网页显示则需要完整的浏览器而浏览器内部又依赖图形库、字体渲染、GPU 合成等一堆组件。这也就是为什么光装一个 mpv 或者 Firefox 还不够得先让系统具备图形输出的能力。1.2 先想清楚你要的是“本地显示”还是“远程显示”在动手之前建议先问自己一个问题画面最终要在哪儿看。这一步决定了后续完全不同的配置路线。使用场景显示位置推荐路线客厅媒体播放机本地接 HDMI/显示器图形栈 mpv/VLC 自动登录前台产品展示屏本地接大屏图形栈 Chromium Kiosk 模式手机/电脑远程查看远程设备VNC / X11 转发 / noVNC 网页方案溯源系统展示大屏本地大屏 远程维护本地 Kiosk VNC 备用远程本地显示的核心是“让 Server 自己长出桌面”远程显示的核心是“通过网络把画面传出去”。两者并不冲突很多场景是本地输出为主、远程维持为辅。下面我会把这两条线的关键配置都走一遍你根据需求挑着用就行。2. 搭建可显示的底座图形栈、浏览器与播放器2.1 更新系统与安装图形栈我习惯先做一轮系统更新再安装图形相关组件。注意 Ubuntu Server 装完通常很干净直接装包就行不用担心依赖冲突。sudo apt update sudo apt upgrade -y sudo apt install -y xorg xinit openbox lightdm这里解释一下为什么这么装。xorg是 X 窗口系统的服务器实现负责最底层的图形显示服务openbox是一个轻量窗口管理器只负责管理窗口的移动、缩放和层级比 GNOME 那套桌面环境省非常多资源lightdm是显示管理器负责登录界面和自动登录。如果你只是为了放视频或者固定显示网页完全没必要装整个 ubuntu-desktop那会把系统拖得又重又慢。装完之后先别急着重启我们继续装应用层。2.2 解码器与硬件加速播放视频前必须做的事视频能不能顺畅播放解码器很关键。Ubuntu 因为版权原因默认源里不带 mp3、H.264、AAC 等多媒体解码器需要手动装一个扩展包sudo apt install -y ubuntu-restricted-extras然后安装播放器和浏览器sudo apt install -y mpv vlc firefoxmpv 是我个人最推荐的 Linux 播放器命令脚本化极其方便适合做播放终端VLC 更适合有人手动去点的场景图形界面友好Firefox 用于网页展示。如果你更喜欢 ChromiumUbuntu 下直接sudo apt install chromium-browser即可。硬件加速这块很多人会直接跳过结果播放 4K 视频 CPU 占用率拉满、画面卡顿。看硬件情况按需装驱动# Intel 核显 sudo apt install -y intel-media-va-driver mesa-va-drivers # AMD 显卡 sudo apt install -y mesa-va-drivers # NVIDIA 独显Server 版不装 CUDA 的话其实不太常见 sudo apt install -y nvidia-driver-535装完可以用vainfo命令验证能看到支持的编码格式就说明驱动正常。这里提醒一句Server 不插独立显卡能跑得很好的场景其实占了大多数别一上来就上 NVIDIA散热和功耗都是额外负担。3. 本地场景让 Ubuntu Server 变成一台播放/展示机3.1 自动登录桌面别插着显示器还输密码如果你把 Ubuntu Server 放在客厅或前台肯定不希望每次断电重启都要去插键盘输密码。配置自动登录很简单。先确认你用的用户然后修改 lightdm 配置sudotee /etc/lightdm/lightdm.conf EOF [Seat:*] autologin-user你的用户名 autologin-user-timeout0 user-sessionopenbox EOF这样开机后 lightdm 会自动以指定用户登录并直接进入 openbox 桌面。如果你希望连 lightdm 都不启动、直接启动 X 进桌面也可以配置 tty 自动登录配合startx但 lightdm 的自动登录配置最直观也最好维护。进入桌面之后我通常还会确认一下声音权限sudo usermod -a -G audio,video 你的用户名别小看这一步很多“装好了但没声音”的问题都是因为用户不在 audio 组里。3.2 用 mpv 循环播放视频支持本地文件与 RTSP 流进了桌面之后播放视频只是执行一条命令的事。mpv 的简洁是这个场景最大的优势mpv --fs --loopinf --hwdecauto /data/videos/demo.mp4参数含义--fs全屏播放--loopinf无限循环适合广告机和展示屏--hwdecauto尽量启用硬件解码--vogpu默认就是 GPU 输出一般不用改如果是监控摄像头的 RTSP 流同样可以播放mpv --fs --loopinf rtsp://192.168.1.100:554/stream1 --demuxer-lavf-ortsp_transporttcp这里用rtsp_transporttcp是因为默认 UDP 在某些网络环境下会花屏卡顿TCP 更稳定。把播放命令做成开机自启我建议写个简单的 systemd 用户服务。在/etc/systemd/system/playvideo.service里配置[Unit] DescriptionPlay Video Loop Aftergraphical.target [Service] User你的用户名 EnvironmentDISPLAY:0 ExecStart/usr/bin/mpv --fs --loopinf --hwdecauto /data/videos/demo.mp4 Restartalways [Install] WantedBymulti-user.target然后sudo systemctl enable playvideo.service就行。注意这里用的multi-user.target因为 lightdm 已经把图形环境拉起来了服务只需要等在图形环境就绪后启动播放器。3.3 用浏览器固定在某个网页信息屏/溯源展示屏的典型玩法浏览器显示网页有几种做法。如果只是偶尔打开看看直接在桌面里启动 Firefox 就行。但做信息展示屏我最常用的是 Chromium 的 Kiosk 模式就是把浏览器锁死在某个页面没有地址栏、没有菜单用户也关不掉。chromium-browser --kiosk --noerrdialogs --disable-infobars http://localhost:8080/trace参数含义--kiosk全屏锁定模式--noerrdialogs不弹错误对话框--disable-infobars隐藏“Chrome 正受到自动测试软件的控制”之类提示条这条命令非常适合溯源类项目的大屏展示。比如你用长安链的 Go 智能合约做了商品溯源系统后端跑在 Ubuntu Server 上前端查询页在同一台机器的 8080 端口Kiosk 模式直接把浏览器锁在那个查询页配合一个触摸显示屏就能做成自助查询机。同样把它做成 systemd 服务[Unit] DescriptionKiosk Browser Aftergraphical.target [Service] User你的用户名 EnvironmentDISPLAY:0 ExecStart/usr/bin/chromium-browser --kiosk --noerrdialogs --disable-infobars http://localhost:8080/trace Restartalways [Install] WantedBymulti-user.target需要说明--kiosk模式并不等于安全沙箱用户按 AltF4 或者 CtrlAltT 还是可能退出。如果你的设备是完全公共场合使用建议再加一层白名单和键盘锁定或者干脆把系统做成只读镜像这个后面在坑位排查里细说。4. 远程场景不接显示器用电脑/手机看 Server 上的画面4.1 用 VNC 远程看桌面最稳妥的方案本地已经跑起图形环境的情况下远程访问最简单的方式就是装一个 VNC 服务端把当前桌面画面通过网络传出来。sudo apt install -y tigervnc-standalone-server首次使用先设置密码vncpasswd然后手动启动一个虚拟桌面测试tigervncserver -xstartup openbox -geometry 1920x1080 -localhost no :1-localhost no表示允许非本机连接-geometry设置远程桌面分辨率。端口默认是5901对应:1VNC 客户端连IP:5901就能看到桌面。把 VNC 也做成 systemd 服务方便开机自启。创建一个/etc/systemd/system/vnc.service[Unit] DescriptionVNC Server Aftergraphical.target [Service] User你的用户名 ExecStart/usr/bin/tigervncserver -xstartup openbox -geometry 1920x1080 -localhost no :1 ExecStop/usr/bin/tigervncserver -kill :1 Restarton-failure [Install] WantedBymulti-user.targetVNC 相比后面要讲的 X11 转发优势是画面刷新稳定支持 Windows/Mac/手机上的各种客户端。缺点是不支持公网直连需要配合内网穿透或至少在同一局域网内使用。4.2 用 SSH X11 转发在本地看视频轻量但只适合应急如果你只是偶尔想在另一台 Linux 电脑上看一下 Server 上的某个视频X11 转发是最轻量的方案。客户端比如你的办公电脑执行ssh -X userserver_ip然后在 SSH 会话里直接执行mpv /data/videos/demo.mp4画面会显示在你本地的 X server 上。这个方案的优点是零配置Server 端只要装了 X 服务就可以缺点是视频画面实际上是原始帧网络传输高分辨率下延迟明显只适合应急查看或看体积不大的文件。4.3 网页化方案浏览器看 Server 上播放的视频远程场景里最优雅的一种是啥都不用装客户端直接开网页查看。有两个思路可以实现。第一个思路是给 VNC 加一层 HTML5 包装使用 noVNC。安装和启动方式很直接sudo apt install -y novnc websockify websockify --web /usr/share/novnc 6080 localhost:5901这样访问http://server_ip:6080就能在浏览器里看到远程桌面。注意 websockify 默认把 6080 端口的 WebSocket 流量转发到 5901 的 VNC 端口中间做了 TCP 到 WebSocket 的桥接。第二个思路是干脆用流媒体服务。如果 Server 上主要播放固定片源可以用 Jellyfin 之类的媒体服务器把视频转成网页可播放的流客户端用浏览器访问http://server_ip:8096就能点播。这个方案适合“既要本地大屏播放又要远程随时查看”的场景。不过 Jellyfin 配置多一步对纯播放视频来说略显重按需取舍。5. 落地过程中常见的坑和排查5.1 声音出不来先看清音频栈最常见的坑就是画面正常但没声音。排查思路按顺序走# 1. 查看系统识别到哪些音频设备 aplay -l # 2. 确认用户是否在 audio 组 groups 你的用户名 # 3. 测试直接播放 mpv --aoalsa /data/videos/test.mp4如果是 HDMI 接电视但声音从主板耳机孔出来还可以指定输出设备。在 mpv 里加--audio-devicealsa/hw:0,3之类的参数或者用pavucontrol图形化切换。Server 默认没有 PulseAudio 服务安装一下更省心sudo apt install -y pulseaudio pavucontrol装完之后如果还不行重启一下系统让音频服务加载环境变量大部分问题都能解决。5.2 VNC 黑屏/灰屏多半是 xstartup 的问题VNC 连上之后桌面一片灰色这种问题我至少踩过三次。原因通常是 tigervnc 的xstartup脚本没有正确指定启动的窗口管理器。解决方法是手动创建~/.vnc/xstartupmkdir -p ~/.vnc cat ~/.vnc/xstartup EOF #!/bin/sh unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS openbox EOF chmod x ~/.vnc/xstartup然后重启 VNCtigervncserver -kill :1 tigervncserver -xstartup ~/.vnc/xstartup -geometry 1920x1080 -localhost no :1注意unset DBUS_SESSION_BUS_ADDRESS非常重要不取消的话桌面进程可能连不出来灰屏十有八九是它导致的。5.3 浏览器崩溃或显示异常试试禁用 GPU 加速Chromium 在 Server 上的显卡驱动不全时开硬件加速反而容易崩。如果你发现打开网页页面花屏、标签页秒退直接在启动参数里禁用 GPUchromium-browser --kiosk --disable-gpu --disable-software-rasterizer http://localhost:8080/trace--disable-gpu可以让 Chromium 退回纯软件渲染。对信息展示屏来说 CPU 渲染通常完全够用稳定压倒一切。反过来说如果你确认显卡驱动没问题可以保留硬件加速以降低 CPU 占用这个要看实际测试效果。另外Ubuntu 22.04 之后的 Firefox 默认是 Snap 版在 Kiosk 场景有时会有权限问题我自己更推荐用 Chromium 或者安装 deb 版 Firefox 来解决。Snap 版跑在容器环境里对 NVIDIA 驱动的支持也容易出问题这个属于已知的坑。5.4 把整套流程写成一个 systemd 服务一键启动所有内容实际项目中我不喜欢一个一个手动启动播放器、浏览器、VNC。推荐的做法是把它们组装成几个独立的 systemd 服务统一管理。一个公共展示屏项目的服务结构大致是这样服务名作用启动顺序lightdm图形登录与自动登录最先vnc.serviceVNC 远程桌面lightdm 之后kiosk.serviceKiosk 浏览器显示网页稍作延迟playvideo.service循环播放视频视需求决定如果一个服务挂了Restartalways会自动拉起系统重启后所有服务按依赖自动恢复。配合 crontab 定时重启比如每天凌晨 3 点定时 reboot就能实现超长时间无人值守。我实际做过最长的一个项目是跑了三个月没碰过机器重启过两次都是因为机房断电整体非常稳定。6. 写在最后几点实战体会很多人一听到“Ubuntu Server 播放视频显示网页”就觉得这是伪需求其实做出来后会发现它的优点是桌面版比不了的系统省资源、开机快、不容易被误操作、可以直接装 Docker 跑后端服务。就以长安链商品溯源来说一台 Server 既跑 Go 智能合约的链上服务又用 Chromium Kiosk 模式展示前端查询页面比用 Windows 工控机省心得多。我个人实际使用中的体会是不要一上来就想着装完整桌面轻量窗口管理器往往更稳定不要把视频播放和网页显示做成同一个进程尽量拆成独立 systemd 服务各自挂了各自重启VNC 一定要配好 xstartup灰屏问题几乎都能从那里找到根源。最后再分享一个小技巧做完所有配置之后重启一次系统看看能不能全自动恢复到你想要的状态如果重启后还需要手动执行哪怕一条命令就说明配置还没到位继续调稳定再交付使用。
返回列表