在Linux上打造娱乐终端

Posted by Hsz on September 10, 2025

在Linux上打造娱乐终端

即便是在不久之前,Linux系统一般都认为是服务器和开发者的专属,但随着Valve的steam deck的成功,以及微软对开源的拥抱,Linux的桌面娱乐生态也迎来了前所未有的发展.现如今,Linux桌面娱乐生态已经足够丰富,足以满足大部分人的娱乐需求了.这篇文章我们将专注于在Linux上打造娱乐终端这一话题.

本文介绍的娱乐终端可以理解为”HTPC”(Home Theater PC),即家庭影院电脑.这种电脑通常连接到电视或投影仪上,用于播放电影、音乐和游戏等娱乐内容,专注于无键鼠条件下的体验.我们将介绍在Linux上打造这样一个娱乐终端所需的软件和硬件选择,以及一些实用的配置技巧.

Linux下的娱乐生态

娱乐需求主要包括游戏,音影等方面.在linux下已经有了比较成熟的生态,可以满足这些需求.

steam

steam大家都知道,知名的游戏平台嘛.但在linux下steam是一个神奇的存在,某种程度上可以说是steam盘活了桌面linux的游戏生态都不过分.

steam最基本的能力当然是让玩家可以方便的打游戏,阀门社为了这个目标煞费苦心,他们的努力直接给linux平台大范围扩展了生态,以至于steam即便不打游戏都是linux上的必装软件.

mpv

mpv是linux下最知名的开源视频播放器,它支持几乎所有的视频格式和编解码器,并且有着非常强大的脚本支持能力.通过安装各种脚本,mpv可以实现从简单的播放功能到复杂的音影管理功能.对于娱乐终端来说,mpv是一个不可或缺的软件.

kodi

kodi是一个开源的家庭影院软件,它可以将你的电脑变成一个功能强大的家庭影院系统.通过安装各种插件,kodi可以实现从播放本地视频到在线播放各种视频资源的功能.对于娱乐终端来说,kodi是一个非常好的选择. 在有nas的情况下,kodi可以直接访问nas上的视频资源,实现家庭影院的功能.

EmuDeck

linux下的模拟器生态也非常丰富,EmuDeck是一个非常好的模拟器管理工具,它可以帮助你方便的安装和管理各种模拟器.通过EmuDeck,你可以轻松的在linux下玩各种经典的游戏机游戏,而且可以和steam无缝集成,让你可以在steam上直接启动模拟器游戏.

硬件选择

对于Linux下的娱乐终端来说,硬件的选择有一些额外的讲究.众所周知,NVIDIA的闭源驱动在Linux下的支持并不好,尤其是在新内核和新Xorg版本发布后,往往需要等待一段时间才能有新的驱动支持.而AMD的开源驱动则相对来说支持更好一些,因为它是集成在内核中的,只要内核支持就能用.因此,如果你打算在Linux下打造一个娱乐终端,我建议选择AMD的显卡,尤其是APU,因为它们不仅性能不错,而且功耗也比较低,非常适合用作娱乐终端.但apu的性能偏低,比如传奇核显780m,它大部分游戏1080p中画质都可以达到,但更高的要求就比较难了.如果你对画质,帧数有更高的要求,那就需要选择独立显卡了,但amd的独显普遍功耗较高,发热也大,这就需要一个比较大的散热模块和电源支持了.这显然并不符合我们HTPC的定位需求.因此,如果你需要独立显卡,我建议选择功耗较低的型号.作为htpc,个人觉得总体功耗应该控制在300w内,机器整体控制在6L以内会比较合适,否则就不适合放在客厅里当娱乐终端了.

最终的硬件选择,个人建议按打游戏时的画质和帧数要求来决定:

  • 如果你只是想玩一些轻度游戏,比如独立游戏,2d游戏,老3A,那上一代的apu就能满足了,比如ryzen 5 5600g/5700g+华擎deskmini x300或其他集成660m核显的准系统机器.这样基本是千元级别的成本,机箱可以在2L以内,电源一般也只需要120w左右即可.小巧玲珑,放在客厅里一点也不突兀.

  • 如果你想可以进一步的玩一些比较新的3A大作,画质要求不高,那最新一代的APU完全够用,比如ryzen 5 8700g+华擎deskmini x600或其他集成780m/890m核显的准系统机器.这样机箱依然可以在2L以内,电源120w,但成本会提升一些,780m的准系统配差不多的内存硬盘通常也就是2500元以下.

  • 再更进一步,如果你想玩3A大作,画质要求中等偏上,那就需要独立显卡了.现在的amd的独显普遍尺寸挺大的,基本没有单风扇的型号,因此机箱深度几乎都要超过25cm,体积也会提升到6L以上.此时有如下几种取舍

    • 可以接受机箱大点,但必须要性能,那就rx7600xt或更高型号的显卡,机箱选择一些支持中等长度显卡的mini itx机箱,电源选择500w以上的即可.整体成本自然就上来了,单显卡就要2000元以上,整机下来差不多要6000元左右. 我个人是接受不了这么大的机箱放在客厅的.

    • 如果机箱体积必须尽可能小,画质可以妥协,那就选择功耗更低刀卡或者二手/上代单风扇显卡,比如rx 6500xt/RX6400LP,这种显卡功耗低,发热少,机箱可以选择一些超小型的mini itx机箱,电源选择200w~300w左右的即可,再配合780m核显.整体成本也会低一些,但画质帧数需要一些妥协,而且要发挥出这些显卡的性能,还需要对系统进行一些调优,相对比较折腾些.(我的选择)

  • 再更高要求的话,那就不适合做htpc了,直接上台式机吧.

发行版选择

对于htpc,发行版的选择至关重要,因为它决定了系统的稳定性和易用性.桌面linux按GUI操作逻辑大致可以分为两大类

模式 代表系统 体验 适合场景
手持/主机模式 (Handheld/Game Mode) Bazzite, SteamOS, CachyOS Handheld版等 开机直接进入 Steam Deck 同款 UI,完全用手柄操作。看不到 Linux 桌面 客厅电视机、3.8L 专用游戏机
桌面优先模式(Desktop First) CachyOS 标准版, Ubuntu, debian等 开机进入普通的 Linux 桌面 (KDE/GNOME),像 Windows 一样点开 Steam 玩 办公+游戏两用机

对于htpc来说,显然我们应该使用手持/主机模式的发行版.目前自组htpc用的最多最知名的这类发行版是BazziteCachyOS Handheld版,这两者的主要区别是他们基于的底层发行版–Bazzite基于Fedora,而CachyOS Handheld版基于Arch.

如果你追求稳定性和易用性,那我建议选择Bazzite,因为Fedora本身是一个非常稳定的发行版;如果你追求最新的软件和更高的自定义性,那可以选择CachyOS Handheld版,因为Arch本身是一个滚动更新的发行版,软件版本通常都比较新.

我个人会选择CachyOS Handheld版,因为我喜欢折腾.我还希望在不用的时候可以后台跑跑llm模型服务,顺便当个小服务器用.

steam生态

在linux上steam的主流安装方式是使用flathub版本,这种方式最简单,最干净,也最不容易出错.关键它还会集成gamescope.当然由于flatpak的沙盒机制,它对系统的访问是有一些限制的,我们需要做一些额外的配置才能让它发挥出最大的效果.

无论哪种安装方式,steam只要安装好了就能用,这一点不用担心.安装steam,我建议遵从如下原则

  1. 先确保你的显卡驱动已经安装好,并且能正常工作,同时显卡可以让vulkan识别(可以用vulkaninfo | grep "AMD"vulkaninfo | grep "NVIDIA"命令检查)
  2. 安装前先用timeshift备份下系统,以防万一

需要注意,steam在第一次安装好后都需要联网下载更新才能正常工作,这必须翻墙才能更新,如果你在国内你需要在第一次运行steam时挂着系统代理.

如果你是点击图标启动的steam你是无法查看到是否有在更新以及更新的进度的,你必须在终端中执行steam才能看到这些信息,要在终端中执行steam,执行如下命令

flatpak安装

flatpak run com.valvesoftware.Steam

flatpak版本的额外设置

显卡驱动问题

如果你是用flatpak安装的steam,那就要注意显卡驱动的问题了.由于flatpak的沙盒机制,它对系统的访问是有限制的,尤其是对显卡驱动的访问.如果你的显卡驱动没有正确配置,那么steam可能无法识别你的显卡,从而导致游戏无法运行.如何检查flatpak是否有安装好显卡驱动呢?可以用下面的命令检查

flatpak list | grep nvidia

如果你看到有NVIDIA相关的条目,那就说明flatpak已经可以正确识别了你的n卡驱动,如果没有,那就说明没有识别到,你需要安装对应版本的nvidia驱动支持包.安装命令如下

flatpak install flathub org.freedesktop.Platform.GL.nvidia-你的驱动版本号

额外路径的问题

如果你希望游戏都放在一个单独的盘(比如/game)下,那你需要额外设置下这个路径的权限,否则steam是无法访问这个路径的.设置命令如下

flatpak override --user --filesystem=/game com.valvesoftware.Steam

同理,如果你希望steam管理非steam游戏,那你也需要设置下这些非steam游戏所在路径的权限.比如:

flatpak override --user --filesystem=/media/MyWinGames com.valvesoftware.Steam

添加非steam应用

steam除了可以管理它自己平台上的软件,也可以自己给它添加软件由他启动

添加非steam应用-入口

添加非steam应用-选应用

steam runtime

如果游戏也算应用的话steam在linux上可能是最大的应用分发渠道了.steam通过steam-linux-runtime支持原生linux应用.

而这个steam-linux-runtime实际上就是一个通用的轻量级沙盒,包含了一个统一的库环境并用namespace与操作系统隔离.一些游戏开发相关的开源应用比如blender,godot,原生支持linux的游戏比如dota也都可以使用这种方式运行.

由于这个环境也是用namespace做抽象的,所以性能损失也是有的,只是没那么多.

话虽如此,我个人还是不太推荐用steam管理除游戏以外的linux原生应用的,一方面这种应用太少,另一方面这类应用都往往是对计算性能要求比较高的类型,白白损失性能还是太可惜了.

转译windows应用

其实很久之前就有一个开源项目wine致力于让linux和macos可以执行windows程序.起工作原理可以理解为将windows程序调用的各种系统依赖在linux/macos上重新实现一遍,然后让windows程序调用这些被转译的依赖以执行.这一套方案原理上逻辑上没啥问题,但一直以来支持并不好,主要原因是图形接口的转译跟不上.

  1. 一方面是厂商不开源,让转译工作难以进行,
  2. 另一方面是开源的工具(opengl这类)性能拉胯.
  3. 最后就是项目是社区驱动的,没钱没资源,维护自然也跟不上

而就在最近几年转译应用忽然就迎来了春天,主要取决于两点

  1. 微软开始拥抱开源了,
  2. 阀门社开始做steam deck了.

总而言之,阀门社搞了个开源的转译层项目proton.这直接让linux下可以正常跑大部分windows平台的游戏,还顺便让其他windows软件也可以借助steam进行管理运行.

我们就以官网下载的原生版本的steam为基准,介绍转译应用.

使用steam安装proton

首先我们要先安装steam,由于steam本身是一个启动器,后需可能会有很多需要手动操作的部分,因此最好是原生安装方便手动调试.然后进入steam,进入,勾选工具,找到proton,一般装个最新版本就够用了.也可以多装一个proton experimental备用,然后视游戏安装相关的反作弊运行时即可.

使用ProtonUp-Qt安装proton-ge

proton项目是开源的,除了steam官方的proton,自然也会有魔改proton.其中最知名的自然就是proton-ge,这个第三方的魔改proton据说比官方版本效率更高些,而且兼容性会更好些,虽然也一样可能有兼容性问题.

proton-ge官方给的安装方式还是比较麻烦的,我们可以使用ProtonUp-Qt来进行自动安装,只要打开后选择最新版本安装即可.ProtonUp-Qt会识别出你用的是哪种安装方式的steam,然后自动将proton-ge安装到对应的位置.

安装proton-ge

使用proton运行非steam的windows游戏

即便是安装好proton后,windows平台的软件也是不能直接下载了用的,我们需要选中已经购买好的游戏,点击右侧设置(齿轮按钮)->属性->兼容性,选一个proton版本强制指定兼容层.这样游戏就可以下载运行了.

设置proton-入口

设置proton-选择版本

至于能不能玩,这就得群策群力了,protondb是一个steam上游戏兼容性的数据网站,主要靠社区玩家提交报告来确定特定游戏的兼容性.我们可以先在其中查看

proton运行windows游戏时指定显卡[2025-11-07更新]

proton是阀门社针对steamos做的兼容层,而steamos本身是为steam deck定制的,steam deck使用的是amd的apu,因此proton默认是针对amd显卡进行优化的.我自己测试发现使用n卡在proton下兼容性是不如amd的,比如我用n卡运行暗黑2重置版,会出现运行一段时间后游戏画面卡死显卡负载清零的情况,而用amd显卡就不会出现这个问题.

如果我们的机器上有多块显卡,比如笔记本上常见的集成显卡+独立显卡的组合,那我们可以通过指定使用amd显卡(无论独显还是核显)的方式来尝试让n卡有兼容性问题的游戏运行起来.

proton的基本原理是通过vulkan来模拟directx的调用,而vulkan本身是支持多显卡的,因此我们要指定特定显卡运行游戏,需要先了解下我们系统中显卡的vulkan设备号.首先我们需要可以查看vulkan设备信息的工具,这可以安装vulkan-tools包实现.

sudo apt install vulkan-tools

我们可以参考如下步骤进行设置:

  1. 调用vulkaninfo命令找到我们想用的显卡的设备号

     vulkaninfo | grep -A 20 'GPU'
    

    在输出中会看到类似以下格式的设备列表:

     GPU0:
     ...
     GPU1:
     ...
    

    GPU后面的数字就是设备号,而其下面的内容中可以找到显卡的型号信息.记住我们想用的显卡的设备号.

  2. [可选]检查vulkan是否有显卡的vulkan驱动设置

    进入/usr/share/vulkan/icd.d/目录,查看里面是否有对应显卡的icd文件.

    • amd显卡一般是amd_icd64.jsonradeon_icd.x86_64.json
    • n卡一般是nvidia_icd.json

    如果没有对应文件,那就说明你的显卡驱动没有正确安装,需要先安装好显卡驱动.

  3. 在steam中为特定游戏设置环境变量

    打开steam,在中右键点击想要设置的游戏,选择属性->启动选项,在里面添加如下环境变量:

    • amd显卡
     VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/radeon_icd.x86_64.json VK_DEVICE_INDEX=设备号 %command%
    
    • n卡
     VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nvidia_icd.x86_64.json VK_DEVICE_INDEX=设备号 %command%
    

之后保存退出即可.这样游戏就会使用指定的显卡运行了.

游戏帧数检测

我们看到很多评测视频里会有帧数(FPS)等指示用来观察游戏的流畅程度.在linux下也有,需要使用flightlessmango/MangoHud这个软件.

flatpak安装的steam

如果是flatpak安装的steam,那我们就不需要直接装mangohud,而是要给flatpak安装mangohud的支持包

flatpak install flathub org.freedesktop.Platform.VulkanLayer.MangoHud

安装过程中会提示你选择对应的版本,你选择与你steam一致的版本即可(用flatpak info --show-runtime com.valvesoftware.Steam检查steam对应的版本).

然后还需要再steam的启动选项修改中添加对应的环境变量

flatpak override --user --env=MANGOHUD=1 com.valvesoftware.Steam

这样就可以在flatpak安装的steam中使用mangohud了.

注意和原生的steam中不同,我们不用修改steam中设置启动选项.因为这个环境变量是给flatpak的steam进程设置的,它会全局生效.

这种方式同样会读取~/.config/MangoHud/MangoHud.conf文件进行配置.参照上面的配置即可.

关闭mangohud

如果你只是想暂时不看帧数,最简单的方法是在游戏中通过快捷键切换.MangoHud默认的开关快捷键是Shift + F12.在游戏里按下这个组合键,MangoHud的叠加层就会隐藏.再次按下它又会重新出现.这个方法的好处是你不需要做任何系统层面的改动并且可以随时切换

如果你想永久关闭mangohud,那就需要把启动选项修改中的mangohud %command%给删掉.如果是flatpak安装的steam,那就需要把之前设置的环境变量给删掉

flatpak override --user --env=MANGOHUD= com.valvesoftware.Steam
可视化配置MangoHud.conf

如果你不想手动编辑MangoHud.conf文件,也可以使用一个可视化的配置工具Mango Juice.一样的使用flatpak安装即可.

flatpak install flathub io.github.radiolamp.mangojuice

这个工具可以让我们通过图形界面来配置MangoHud.conf文件,并且可以实时预览效果.配置完成后点击Save按钮即可保存配置,也可以保存为不同的配置文件以便切换.

linux下的音影娱乐

linux下的音影娱乐生态其实也挺丰富的,这里就不一一介绍了,只推荐几个我个人觉得不错的软件

串流

用steam串流

说到串流可能大家想到的更多的是sunshine-moonlight的串流组合.但实际情况是在用N卡的情况下sunshine强无敌,而在用a卡尤其是apu的核显的情况下sunshine并不好用,尤其在linux下根本用不了.反而是steam link效果还不错.

用法也不复杂

  1. 接收端的机器安装steam link,苹果直接在app store里下,安卓则去官网下即可,之后打开它
  2. 发送端机器打开steam,在steam->设置中找到远程畅玩,激活后配对流式应用即可.如果你已经有配对好了的就需要先取消设备配对然后再做配对
  3. 这时你接收端的机器会有个pin码,在发送端机器中将这个码填上就配对完成了.

steamlink设置入口-1 steamlink设置入口-2

steam串流非常吃网络,发送端一定要用有线的方式接入网络,接收端也尽量在网络覆盖范围内.网络稳定串流才能稳定

mycard

mycard很神奇的自带linux支持,这个平台主要是用来玩ygopro和东方的,

不想花钱买卡又想打游戏王的牌佬就可以在linux下很轻松的玩到ygopro2了.在linux下首页下载提供的是一个appimage,下载下来后给个+x权限人工集成下就能用了.

有如下注意事项:

  • mycard下载游戏依赖aria2c,需要先安装aria2c再安装mycard
  • mycard解压游戏依赖zstd,需要先安装zstd(sudo apt install zstd)再安装mycard
  • 游戏王只能使用ygopro2,因为ygopro的依赖编译有问题,会缺少irrKlang,而ygopro2是unity开发,没有依赖问题
  • 东方游戏都是window游戏,mycard仅能用作下载,运行需要借助steam的proton

通用的超分,插帧方式