{"id":347,"date":"2025-08-25T18:56:40","date_gmt":"2025-08-25T10:56:40","guid":{"rendered":"http:\/\/106.52.213.145:21080\/?p=347"},"modified":"2025-08-25T19:00:29","modified_gmt":"2025-08-25T11:00:29","slug":"zhetengrijizai-ubuntu-shangdajian-steam-headless-wutouyouxifuwuqinvidia-docker-novnc","status":"publish","type":"post","link":"https:\/\/apifj.com\/index.php\/2025\/08\/25\/zhetengrijizai-ubuntu-shangdajian-steam-headless-wutouyouxifuwuqinvidia-docker-novnc\/","title":{"rendered":"[\u6298\u817e\u65e5\u8bb0]\u5728 Ubuntu \u4e0a\u642d\u5efa Steam-Headless \u6e38\u620f\u670d\u52a1\u5668\uff08NVIDIA + Docker + noVNC + sunsine +Xorg\uff09\uff5c\u9644\u6392\u9519\u5168\u8bb0\u5f55"},"content":{"rendered":"<p>\u6700\u8fd1\u5728 B\u7ad9 \u4e0a\u5076\u7136\u53d1\u73b0\u4e00\u4e2a\u540d\u4e3a <a href=\"https:\/\/github.com\/Steam-Headless\/docker-steam-headless\"><strong>Steam-Headless<\/strong><\/a> \u7684\u5f00\u6e90\u9879\u76ee\uff0c\u5b83\u5141\u8bb8\u6211\u4eec\u5c06\u4e00\u53f0\u5e26\u663e\u5361\u7684\u670d\u52a1\u5668\u53d8\u6210\u8fdc\u7a0b\u6e38\u620f\u4e3b\u673a\uff0c\u901a\u8fc7\u6d4f\u89c8\u5668\u6216 Moonlight \u7b49\u4e32\u6d41\u5de5\u5177\u6765\u8fd0\u884c Steam \u6e38\u620f\u3002\u5bb6\u91cc\u6b63\u597d\u6709\u4e00\u53f0\u95f2\u7f6e\u7684 Ubuntu \u670d\u52a1\u5668\u914d\u5907\u4e86 NVIDIA \u663e\u5361\uff0c\u4e8e\u662f\u51b3\u5b9a\u52a8\u624b\u5c1d\u8bd5\u3002<br \/>\n\u3010\u5f3a\u70c8\u63a8\u8350\u53c2\u8003\u6587\u732e\u7684\u6559\u7a0b\uff01\uff01\uff01\u3011<br \/>\n\u672c\u6587\u5c06\u5b8c\u6574\u8bb0\u5f55\u6211\u5728 <strong>Ubuntu \u7cfb\u7edf\u4e0a\u90e8\u7f72 Steam-Headless \u5bb9\u5668\u5316\u670d\u52a1<\/strong>\u7684\u5168\u8fc7\u7a0b\uff0c\u6db5\u76d6\uff1a<\/p>\n<ul>\n<li>Docker \u4e0e NVIDIA \u9a71\u52a8\u73af\u5883\u642d\u5efa<\/li>\n<li>NVIDIA Container Toolkit \u5b89\u88c5<\/li>\n<li><code>docker-compose<\/code> \u914d\u7f6e\u4e0e\u542f\u52a8<\/li>\n<li><strong>\u771f\u5b9e\u8e29\u5751\u4e0e\u6392\u9519\u5168\u8fc7\u7a0b<\/strong><\/li>\n<li>\u6700\u7ec8\u5b9e\u73b0\u8fdc\u7a0b\u7545\u73a9 Steam \u6e38\u620f<\/li>\n<\/ul>\n<blockquote>\n<p>\ud83d\udca1 \u76ee\u6807\uff1a\u6253\u9020\u4e00\u53f0\u652f\u6301 GPU \u52a0\u901f\u3001\u53ef\u901a\u8fc7\u7f51\u9875\u8bbf\u95ee\u3001\u5e76\u80fd\u4e32\u6d41\u8fd0\u884c Steam \u6e38\u620f\u7684\u5bb6\u5ead\u4e91\u6e38\u620f\u670d\u52a1\u5668\u3002<\/p>\n<\/blockquote>\n<hr \/>\n<h2>\u2705 \u524d\u7f6e\u6761\u4ef6<\/h2>\n<p>\u8bf7\u786e\u4fdd\u4f60\u7684\u4e3b\u673a\u6ee1\u8db3\u4ee5\u4e0b\u8981\u6c42\uff1a<\/p>\n<table>\n<thead>\n<tr>\n<th>\u6761\u4ef6<\/th>\n<th>\u8bf4\u660e<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>\u64cd\u4f5c\u7cfb\u7edf<\/strong><\/td>\n<td>Ubuntu 20.04 \/ 22.04 LTS\uff08\u63a8\u8350\uff09<\/td>\n<\/tr>\n<tr>\n<td><strong>GPU<\/strong><\/td>\n<td>NVIDIA \u663e\u5361\uff08Kepler \u67b6\u6784\u53ca\u4ee5\u4e0a\uff0c\u652f\u6301 CUDA\uff09<\/td>\n<\/tr>\n<tr>\n<td><strong>\u9a71\u52a8<\/strong><\/td>\n<td>\u5df2\u5b89\u88c5\u6700\u65b0\u7248 NVIDIA \u9a71\u52a8<\/td>\n<\/tr>\n<tr>\n<td><strong>Docker<\/strong><\/td>\n<td>\u5df2\u5b89\u88c5 Docker CE<\/td>\n<\/tr>\n<tr>\n<td><strong>\u7f51\u7edc<\/strong><\/td>\n<td>\u80fd\u591f\u8bbf\u95ee\u5916\u7f51\uff0c\u9632\u706b\u5899\u5f00\u653e\u5fc5\u8981\u7aef\u53e3<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<blockquote>\n<p>\ud83d\udccc \u672c\u6587\u57fa\u4e8e Ubuntu 22.04 \u6d4b\u8bd5\uff0c\u5176\u4ed6 Debian \u884d\u751f\u7cfb\u7edf\u4e5f\u53ef\u53c2\u8003\u3002<\/p>\n<\/blockquote>\n<hr \/>\n<h2>1\ufe0f\u20e3 \u5b89\u88c5 Docker\uff08\u5982\u672a\u5b89\u88c5\uff09<\/h2>\n<p>\u5982\u679c\u4f60\u8fd8\u672a\u5b89\u88c5 Docker\uff0c\u63a8\u8350\u4f7f\u7528\u5b98\u65b9\u811a\u672c\u65b9\u5f0f\u5feb\u901f\u90e8\u7f72\uff1a<\/p>\n<pre><code class=\"language-bash\"># \u5378\u8f7d\u65e7\u7248\u672c\uff08\u5982\u6709\uff09\nsudo apt-get remove -y docker docker-engine docker.io containerd runc\n\n# \u5b89\u88c5\u4f9d\u8d56\nsudo apt-get update\nsudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common\n\n# \u6dfb\u52a0 Docker \u5b98\u65b9 GPG \u5bc6\u94a5\uff08\u4f7f\u7528\u6e05\u534e\u955c\u50cf\u52a0\u901f\uff09\ncurl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg | sudo gpg --dearmor -o \/etc\/apt\/keyrings\/docker.gpg\n\n# \u6dfb\u52a0\u4ed3\u5e93\uff08\u6e05\u534e\u6e90\uff09\necho \\\n  &quot;deb [arch=$(dpkg --print-architecture) signed-by=\/etc\/apt\/keyrings\/docker.gpg] https:\/\/mirrors.tuna.tsinghua.edu.cn\/docker-ce\/linux\/ubuntu \\\n  $(lsb_release -cs) stable&quot; | sudo tee \/etc\/apt\/sources.list.d\/docker.list &gt; \/dev\/null\n\n# \u66f4\u65b0\u5e76\u5b89\u88c5\nsudo apt-get update\nsudo apt-get install -y docker-ce docker-ce-cli containerd.io\n\n# \u9a8c\u8bc1\u5b89\u88c5\nsudo docker run hello-world<\/code><\/pre>\n<h3>\ud83d\udd10 \u975e root \u7528\u6237\u8fd0\u884c Docker<\/h3>\n<pre><code class=\"language-bash\">sudo groupadd docker\nsudo gpasswd -a $USER docker\nnewgrp docker  # \u5237\u65b0\u7ec4\u6743\u9650<\/code><\/pre>\n<p>\u6d4b\u8bd5\uff1a<code>docker ps<\/code> \u662f\u5426\u65e0\u9700 <code>sudo<\/code> \u5373\u53ef\u6267\u884c\u3002<\/p>\n<hr \/>\n<h2>2\ufe0f\u20e3 \u5b89\u88c5 NVIDIA \u9a71\u52a8\uff08\u5982\u672a\u5b89\u88c5\uff09<\/h2>\n<pre><code class=\"language-bash\"># \u6dfb\u52a0\u56fe\u5f62\u9a71\u52a8 PPA\nsudo add-apt-repository ppa:graphics-drivers\/ppa -y\n\n# \u67e5\u770b\u63a8\u8350\u9a71\u52a8\u7248\u672c\nubuntu-drivers devices\n\n# \u793a\u4f8b\u8f93\u51fa\u4e2d\u4f1a\u663e\u793a\u7c7b\u4f3c\uff1a\n# driver   : nvidia-driver-535 - distro non-free recommended\n\n# \u5b89\u88c5\u63a8\u8350\u7248\u672c\uff08\u4ee5 535 \u4e3a\u4f8b\uff09\nsudo apt install -y nvidia-driver-535\n\n# \u91cd\u542f\u751f\u6548\nsudo reboot<\/code><\/pre>\n<p>\u9a8c\u8bc1\u9a71\u52a8\u662f\u5426\u5b89\u88c5\u6210\u529f\uff1a<\/p>\n<pre><code class=\"language-bash\">nvidia-smi<\/code><\/pre>\n<p>\u4f60\u5e94\u8be5\u770b\u5230 GPU \u4fe1\u606f\u548c\u9a71\u52a8\u7248\u672c\uff0c\u4f8b\u5982\uff1a<\/p>\n<pre><code>+-----------------------------------------------------------------------------+\n| NVIDIA-SMI 535.113.01   Driver Version: 535.113.01   CUDA Version: 12.2     |\n|-------------------------------+----------------------+----------------------+\n| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |\n| Fan  Temp  Perf  Pwr:Usage\/Cap|         Memory-Usage | GPU-Util  Compute M. |\n|===============================+======================+======================|\n|   0  NVIDIA GeForce RTX 3060  Off | 00000000:01:00.0  On |                  N\/A |\n+-------------------------------+----------------------+----------------------+<\/code><\/pre>\n<hr \/>\n<h2>3\ufe0f\u20e3 \u5b89\u88c5 NVIDIA Container Toolkit\uff08\u5173\u952e\u6b65\u9aa4\uff09<\/h2>\n<p>\u4e3a\u4e86\u8ba9 Docker \u5bb9\u5668\u80fd\u8c03\u7528 GPU\uff0c\u5fc5\u987b\u5b89\u88c5 <a href=\"https:\/\/docs.nvidia.com\/datacenter\/cloud-native\/container-toolkit\/latest\/install-guide.html\">NVIDIA Container Toolkit<\/a>\u3002<\/p>\n<h3>\u65b9\u6cd5\u4e00\uff1a\u6807\u51c6\u5b89\u88c5\uff08\u63a8\u8350\uff09<\/h3>\n<pre><code class=\"language-bash\"># \u914d\u7f6e\u751f\u4ea7\u4ed3\u5e93\ndistribution=$(. \/etc\/os-release;echo $ID$VERSION_ID) \\\n  &amp;&amp; curl -fsSL https:\/\/nvidia.github.io\/libnvidia-container\/gpgkey | sudo gpg --dearmor -o \/usr\/share\/keyrings\/nvidia-container-toolkit-keyring.gpg \\\n  &amp;&amp; curl -s -L https:\/\/nvidia.github.io\/libnvidia-container\/$distribution\/libnvidia-container.list | \\\n    sed &#039;s#deb https:\/\/#deb [signed-by=\/usr\/share\/keyrings\/nvidia-container-toolkit-keyring.gpg] https:\/\/#g&#039; | \\\n    sudo tee \/etc\/apt\/sources.list.d\/nvidia-container-toolkit.list\n\n# \u66f4\u65b0\u5305\u5217\u8868\nsudo apt-get update\n\n# \u5b89\u88c5 nvidia-docker2\uff08\u81ea\u52a8\u5305\u542b\u6240\u6709\u4f9d\u8d56\uff09\nsudo apt-get install -y nvidia-docker2\n\n# \u91cd\u542f Docker\nsudo systemctl restart docker<\/code><\/pre>\n<h3>\u2705 \u9a8c\u8bc1\u5b89\u88c5<\/h3>\n<pre><code class=\"language-bash\">sudo docker run --rm --gpus all nvidia\/cuda:12.2.0-base-ubuntu22.04 nvidia-smi<\/code><\/pre>\n<p>\u5982\u679c\u8f93\u51fa\u4e0e\u5bbf\u4e3b\u673a <code>nvidia-smi<\/code> \u4e00\u81f4\uff0c\u5219\u8bf4\u660e GPU \u5df2\u53ef\u5728\u5bb9\u5668\u4e2d\u4f7f\u7528\u3002<\/p>\n<hr \/>\n<h2>4\ufe0f\u20e3 \u521b\u5efa\u76ee\u5f55\u7ed3\u6784<\/h2>\n<p>\u6839\u636e <a href=\"https:\/\/github.com\/Steam-Headless\/docker-steam-headless\/blob\/master\/docs\/docker-compose.md\">Steam-Headless \u5b98\u65b9\u6587\u6863<\/a>\uff0c\u6211\u4eec\u9700\u8981\u521b\u5efa\u51e0\u4e2a\u6301\u4e45\u5316\u76ee\u5f55\u3002<\/p>\n<pre><code class=\"language-bash\"># \u670d\u52a1\u914d\u7f6e\u76ee\u5f55\nsudo mkdir -p \/opt\/container-services\/steam-headless\n\n# \u6570\u636e\u5b58\u50a8\u76ee\u5f55\nsudo mkdir -p \/opt\/container-data\/steam-headless\/{home,.X11-unix,pulse}\n\n# \u53ef\u9009\uff1a\u6e38\u620f\u5b89\u88c5\u76ee\u5f55\nsudo mkdir -p \/mnt\/games\nsudo chmod -R 777 \/mnt\/games\n\n# \u4fee\u6539\u6240\u6709\u8005\u4e3a\u5f53\u524d\u7528\u6237\nsudo chown -R $(id -u):$(id -g) \/opt\/container-data\/steam-headless\nsudo chown -R $(id -u):$(id -g) \/opt\/container-services\/steam-headless\nsudo chown -R $(id -u):$(id -g) \/mnt\/games<\/code><\/pre>\n<hr \/>\n<h2>5\ufe0f\u20e3 \u914d\u7f6e Docker Compose \u9879\u76ee<\/h2>\n<p>\u8fdb\u5165\u670d\u52a1\u76ee\u5f55\uff1a<\/p>\n<pre><code class=\"language-bash\">cd \/opt\/container-services\/steam-headless<\/code><\/pre>\n<h3>5.1 \u4e0b\u8f7d compose \u6587\u4ef6\u548c\u73af\u5883\u53d8\u91cf\u6a21\u677f<\/h3>\n<pre><code class=\"language-bash\"># \u4e0b\u8f7d NVIDIA \u4e13\u7528 compose \u6587\u4ef6\u5e76\u91cd\u547d\u540d\u4e3a docker-compose.yml\nwget -O docker-compose.yml https:\/\/raw.githubusercontent.com\/Steam-Headless\/docker-steam-headless\/master\/docs\/compose-files\/docker-compose.nvidia.yml\n\n# \u4e0b\u8f7d .env \u73af\u5883\u914d\u7f6e\u6587\u4ef6\nwget -O .env https:\/\/raw.githubusercontent.com\/Steam-Headless\/docker-steam-headless\/master\/docs\/compose-files\/.env<\/code><\/pre>\n<hr \/>\n<h2>6\ufe0f\u20e3 \u4fee\u6539 <code>.env<\/code> \u914d\u7f6e\u6587\u4ef6\uff08\u91cd\u70b9\uff09<\/h2>\n<pre><code class=\"language-bash\">nano .env<\/code><\/pre>\n<h3>\ud83d\udd27 \u5173\u952e\u4fee\u6539\u9879\u5982\u4e0b\uff1a<\/h3>\n<table>\n<thead>\n<tr>\n<th>\u53c2\u6570<\/th>\n<th>\u63a8\u8350\u503c<\/th>\n<th>\u8bf4\u660e<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>TZ<\/code><\/td>\n<td><code>Asia\/Shanghai<\/code><\/td>\n<td>\u8bbe\u7f6e\u4e3a\u4e2d\u56fd\u65f6\u533a<\/td>\n<\/tr>\n<tr>\n<td><code>PUID<\/code> \/ <code>PGID<\/code><\/td>\n<td><code>$(id -u)<\/code> \/ <code>$(id -g)<\/code><\/td>\n<td>\u8fd0\u884c\u7528\u6237\u7684 UID\/GID<\/td>\n<\/tr>\n<tr>\n<td><code>USER_PASSWORD<\/code><\/td>\n<td>\u81ea\u5b9a\u4e49\u5bc6\u7801\uff08\u5982 <code>mypass123<\/code>\uff09<\/td>\n<td>\u7528\u4e8e\u767b\u5f55 Web \u754c\u9762<\/td>\n<\/tr>\n<tr>\n<td><code>HOME_DIR<\/code><\/td>\n<td><code>\/opt\/container-data\/steam-headless\/home<\/code><\/td>\n<td>\u6302\u8f7d\u8def\u5f84<\/td>\n<\/tr>\n<tr>\n<td><code>GAMES_DIR<\/code><\/td>\n<td><code>\/mnt\/games<\/code><\/td>\n<td>\u6e38\u620f\u5e93\u8def\u5f84<\/td>\n<\/tr>\n<tr>\n<td><code>DISPLAY<\/code><\/td>\n<td><code>:55<\/code><\/td>\n<td>X Server \u663e\u793a\u7f16\u53f7<\/td>\n<\/tr>\n<tr>\n<td><code>MODE<\/code><\/td>\n<td><code>primary<\/code><\/td>\n<td>\u4e3b\u6a21\u5f0f\uff08\u72ec\u7acb\u8fd0\u884c X\uff09<\/td>\n<\/tr>\n<tr>\n<td><code>WEB_UI_MODE<\/code><\/td>\n<td><code>vnc<\/code><\/td>\n<td>\u4f7f\u7528 noVNC \u8bbf\u95ee\u684c\u9762<\/td>\n<\/tr>\n<tr>\n<td><code>PORT_NOVNC_WEB<\/code><\/td>\n<td><code>8083<\/code><\/td>\n<td>Web \u8bbf\u95ee\u7aef\u53e3<\/td>\n<\/tr>\n<tr>\n<td><code>ENABLE_STEAM<\/code><\/td>\n<td><code>true<\/code><\/td>\n<td>\u81ea\u52a8\u542f\u52a8 Steam<\/td>\n<\/tr>\n<tr>\n<td><code>ENABLE_EVDEV_INPUTS<\/code><\/td>\n<td><code>true<\/code><\/td>\n<td>\u652f\u6301\u952e\u9f20\u7a7f\u900f<\/td>\n<\/tr>\n<tr>\n<td><code>NVIDIA_VISIBLE_DEVICES<\/code><\/td>\n<td><code>all<\/code><\/td>\n<td>\u6240\u6709 GPU \u53ef\u89c1<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<blockquote>\n<p>\u2705 \u4fdd\u5b58\u9000\u51fa\u3002<\/p>\n<\/blockquote>\n<hr \/>\n<h2>7\ufe0f\u20e3 \u542f\u52a8\u5bb9\u5668<\/h2>\n<pre><code class=\"language-bash\">sudo docker-compose up -d --force-recreate<\/code><\/pre>\n<p>\u67e5\u770b\u65e5\u5fd7\uff1a<\/p>\n<pre><code class=\"language-bash\">sudo docker-compose logs -f<\/code><\/pre>\n<p>\u7b49\u5f85\u51e0\u5206\u949f\uff0c\u955c\u50cf\u62c9\u53d6\u5b8c\u6210\u540e\uff0c\u670d\u52a1\u5e94\u6b63\u5e38\u542f\u52a8\u3002<\/p>\n<hr \/>\n<h2>\ud83c\udf10 \u8bbf\u95ee Web \u754c\u9762<\/h2>\n<p>\u6253\u5f00\u6d4f\u89c8\u5668\u8bbf\u95ee\uff1a<\/p>\n<pre><code>http:\/\/&lt;\u4f60\u7684\u670d\u52a1\u5668IP&gt;:8083<\/code><\/pre>\n<p>\u4f60\u5e94\u8be5\u770b\u5230 noVNC \u7684\u767b\u5f55\u754c\u9762\u3002\u70b9\u51fb\u8fde\u63a5\u540e\uff0c\u4f1a\u8fdb\u5165\u4e00\u4e2a\u8f7b\u91cf\u7ea7\u684c\u9762\u73af\u5883\uff0c\u5e76\u81ea\u52a8\u542f\u52a8 Steam\u3002<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/github.com\/Steam-Headless\/docker-steam-headless\/blob\/master\/docs\/images\/web_connect.png?raw=true\" alt=\"web_connect\" \/><\/p>\n<hr \/>\n<h2>\u26a0\ufe0f \u6211\u7684\u771f\u5b9e\u6392\u9519\u5168\u8fc7\u7a0b\uff08\u975e\u5e38\u91cd\u8981\uff01\uff09<\/h2>\n<h3>\u274c \u95ee\u98981\uff1a\u7f51\u9875\u80fd\u6253\u5f00\uff0c\u4f46\u70b9\u51fb\u201cConnect\u201d\u540e\u65e0\u6cd5\u8fde\u63a5<\/h3>\n<p><strong>\u73b0\u8c61<\/strong>\uff1anoVNC \u9875\u9762\u663e\u793a\u201cDisconnected\u201d\uff0c\u65e5\u5fd7\u63d0\u793a <code>Failed to connect to server<\/code>\u3002<\/p>\n<p><strong>\u521d\u6b65\u6000\u7591<\/strong>\uff1a\u7f51\u7edc\u95ee\u9898\uff1fSTUN\/TURN \u914d\u7f6e\uff1fTLS\uff1f<\/p>\n<p><strong>\u6df1\u5165\u6392\u67e5<\/strong>\uff1a<\/p>\n<ul>\n<li>\u67e5\u770b\u5bb9\u5668\u65e5\u5fd7\uff1a<code>docker-compose logs steam-headless<\/code><\/li>\n<li>\u53d1\u73b0\u5173\u952e\u9519\u8bef\uff1a<code>Xorg failed to start<\/code> \u6216 <code>Cannot establish any listening sockets<\/code><\/li>\n<\/ul>\n<p><strong>\u6839\u672c\u539f\u56e0<\/strong>\uff1a<strong>\u5bbf\u4e3b\u673a\u8fd0\u884c\u4e86\u684c\u9762\u73af\u5883\uff08GNOME\uff09\uff0c\u5360\u7528\u4e86 X Server \u548c GPU \u8d44\u6e90<\/strong>\uff0c\u5bfc\u81f4\u5bb9\u5668\u5185\u65e0\u6cd5\u521b\u5efa\u865a\u62df\u663e\u793a\u3002<\/p>\n<p><strong>\u89e3\u51b3\u65b9\u6848<\/strong>\uff1a<\/p>\n<pre><code class=\"language-bash\"># \u505c\u6b62\u684c\u9762\u7ba1\u7406\u5668\uff08GDM3 \u4e3a\u4f8b\uff09\nsudo systemctl stop gdm3\n\n# \u6216\u8005\u7981\u7528\u5f00\u673a\u542f\u52a8\uff08\u8c28\u614e\uff09\nsudo systemctl disable gdm3<\/code><\/pre>\n<blockquote>\n<p>\ud83d\udca1 \u4e0d\u540c\u684c\u9762\u73af\u5883\u5bf9\u5e94\u7684\u670d\u52a1\u540d\uff1a<\/p>\n<ul>\n<li>GNOME: <code>gdm3<\/code><\/li>\n<li>KDE: <code>sddm<\/code><\/li>\n<li>XFCE: <code>lightdm<\/code><\/li>\n<\/ul>\n<\/blockquote>\n<p>\u6b64\u5916\uff0c\u6211\u8fd8<strong>\u8fde\u63a5\u4e86\u4e00\u6839 HDMI \u7ebf\u5230\u663e\u793a\u5668<\/strong>\uff08\u5373\u4f7f\u4e0d\u4eae\u5c4f\uff09\uff0c\u8fd9\u6709\u52a9\u4e8e GPU \u6b63\u5e38\u521d\u59cb\u5316\uff0c\u907f\u514d\u201c\u65e0\u5934\u6a21\u5f0f\u201d\u4e0b\u7684\u9a71\u52a8\u95ee\u9898\u3002<\/p>\n<p>\u2705 <strong>\u89e3\u51b3\u6548\u679c<\/strong>\uff1a\u91cd\u542f\u5bb9\u5668\u540e\uff0cXorg \u6b63\u5e38\u542f\u52a8\uff0cnoVNC \u6210\u529f\u8fde\u63a5\uff01<\/p>\n<hr \/>\n<h3>\u274c \u95ee\u98982\uff1aMoonlight \u8fde\u63a5\u540e\u9ed1\u5c4f<\/h3>\n<p><strong>\u73b0\u8c61<\/strong>\uff1aSunshine \u5df2\u542f\u7528\uff0cMoonlight \u5ba2\u6237\u7aef\u80fd\u53d1\u73b0\u8bbe\u5907\u5e76\u8fde\u63a5\uff0c\u4f46\u753b\u9762\u4e3a\u9ed1\u8272\u3002<\/p>\n<p><strong>\u6392\u67e5\u601d\u8def<\/strong>\uff1a<\/p>\n<ul>\n<li>\u68c0\u67e5 Sunshine \u662f\u5426\u8fd0\u884c\uff1a<code>ps aux | grep sunshine<\/code><\/li>\n<li>\u68c0\u67e5\u9632\u706b\u5899\u662f\u5426\u653e\u884c Sunshine \u7aef\u53e3\uff08UDP 47984~47999\uff09<\/li>\n<li>\u68c0\u67e5\u5bb9\u5668\u65e5\u5fd7\u662f\u5426\u6709\u7f16\u7801\u9519\u8bef<\/li>\n<\/ul>\n<p><strong>\u53d1\u73b0\u7ebf\u7d22<\/strong>\uff1a<\/p>\n<ul>\n<li>\u65e5\u5fd7\u663e\u793a\u89c6\u9891\u6d41\u5df2\u53d1\u9001<\/li>\n<li>\u5ba2\u6237\u7aef\u6536\u5230\u5e27\u4f46\u65e0\u6cd5\u6e32\u67d3<\/li>\n<\/ul>\n<p><strong>\u7075\u5149\u4e00\u73b0<\/strong>\uff1a\u4f1a\u4e0d\u4f1a\u662f<strong>\u7801\u7387\u592a\u4f4e\u5bfc\u81f4\u89e3\u7801\u5931\u8d25<\/strong>\uff1f<\/p>\n<p><strong>\u89e3\u51b3\u65b9\u6848<\/strong>\uff1a<br \/>\n\u5728 <strong>Moonlight \u5ba2\u6237\u7aef\u8bbe\u7f6e\u4e2d<\/strong>\uff0c\u5c06\u89c6\u9891\u6bd4\u7279\u7387\u4ece\u9ed8\u8ba4\u7684 20 Mbps \u62c9\u9ad8\u5230 <strong>150 Mbps<\/strong>\uff0c\u5206\u8fa8\u7387\u8bbe\u4e3a 1080p\uff0c\u7f16\u7801 H.265\u3002<\/p>\n<p>\u2705 <strong>\u5947\u8ff9\u53d1\u751f<\/strong>\uff1a\u753b\u9762\u77ac\u95f4\u6e05\u6670\u663e\u793a\uff0c\u6e38\u620f\u6d41\u7545\u8fd0\u884c\uff01<\/p>\n<blockquote>\n<p>\ud83c\udfaf \u539f\u56e0\u5206\u6790\uff1a\u4f4e\u7801\u7387\u4e0b H.265 \u7f16\u7801\u53ef\u80fd\u51fa\u73b0\u5173\u952e\u5e27\u4e22\u5931\u6216\u89e3\u7801\u5668\u8d85\u65f6\uff0c\u9ad8\u7801\u7387\u66f4\u7a33\u5b9a\uff0c\u5c24\u5176\u5728\u5c40\u57df\u7f51\u73af\u5883\u4e0b\u5b8c\u5168\u53ef\u884c\u3002<\/p>\n<\/blockquote>\n<hr \/>\n<h3>\u274c \u95ee\u98983\uff1aSteam \u767b\u5f55\u540e\u53cd\u590d\u91cd\u542f\u6216\u5361\u4f4f<\/h3>\n<p><strong>\u73b0\u8c61<\/strong>\uff1aSteam \u542f\u52a8\u540e\u767b\u5f55\u8d26\u53f7\uff0c\u4f46\u4e0d\u4e45\u81ea\u52a8\u9000\u51fa\u6216\u5361\u5728\u52a0\u8f7d\u754c\u9762\u3002<\/p>\n<p><strong>\u53ef\u80fd\u539f\u56e0<\/strong>\uff1a<\/p>\n<ul>\n<li>\u5171\u4eab\u5185\u5b58\u4e0d\u8db3\uff08<code>shm_size<\/code> \u592a\u5c0f\uff09<\/li>\n<li>\u6743\u9650\u95ee\u9898\uff08PUID\/PGID \u4e0d\u5339\u914d\uff09<\/li>\n<li>\u78c1\u76d8\u7a7a\u95f4\u4e0d\u8db3<\/li>\n<\/ul>\n<p><strong>\u89e3\u51b3\u65b9\u6848<\/strong>\uff1a<br \/>\n\u5728 <code>docker-compose.yml<\/code> \u4e2d\u8c03\u6574\uff1a<\/p>\n<pre><code class=\"language-yaml\">shm_size: 4G  # \u539f\u4e3a 2G\uff0c\u5347\u7ea7\u4e3a 4G<\/code><\/pre>\n<p>\u5e76\u786e\u4fdd <code>.env<\/code> \u4e2d\u7684 <code>PUID<\/code> \u548c <code>PGID<\/code> \u4e0e\u5bbf\u4e3b\u673a\u7528\u6237\u4e00\u81f4\u3002<\/p>\n<p>\u8fd9\u91cc\u6211\u589e\u52a0\u4e86swap\u540e\u5c31\u597d\u5f88\u591a\u4e86\u3002<\/p>\n<hr \/>\n<h2>\u2705 \u6210\u529f\u8fd0\u884c\u540e\u7684\u4f53\u9a8c<\/h2>\n<p>\u73b0\u5728\u4f60\u53ef\u4ee5\uff1a<\/p>\n<ul>\n<li>\u5728 noVNC \u9875\u9762\u4e2d\u767b\u5f55 Steam \u8d26\u53f7<\/li>\n<li>\u4e0b\u8f7d\u5e76\u5b89\u88c5\u6e38\u620f\uff08\u8def\u5f84 <code>\/mnt\/games<\/code>\uff09<\/li>\n<li>\u4f7f\u7528 Moonlight \u4ece\u624b\u673a\u3001\u5e73\u677f\u3001TV \u4e0a\u4e32\u6d41\u6e38\u73a9<\/li>\n<li>\u5b9e\u73b0\u771f\u6b63\u7684\u201c\u5bb6\u5ead\u4e91\u6e38\u620f\u201d\u4f53\u9a8c\uff01<\/li>\n<\/ul>\n<hr \/>\n<h2>\ud83e\udde9 \u529f\u80fd\u6269\u5c55\u5efa\u8bae<\/h2>\n<table>\n<thead>\n<tr>\n<th>\u529f\u80fd<\/th>\n<th>\u5b9e\u73b0\u65b9\u5f0f<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u591a\u7528\u6237\u652f\u6301<\/td>\n<td>\u590d\u5236\u5bb9\u5668\u5b9e\u4f8b\uff0c\u4f7f\u7528\u4e0d\u540c <code>PUID\/PGID<\/code><\/td>\n<\/tr>\n<tr>\n<td>\u81ea\u52a8\u5907\u4efd<\/td>\n<td>\u4f7f\u7528 <code>rsync<\/code> \u6216 <code>borg<\/code> \u5b9a\u671f\u5907\u4efd <code>\/home<\/code><\/td>\n<\/tr>\n<tr>\n<td>\u5f00\u673a\u81ea\u542f<\/td>\n<td>\u5c06 <code>docker-compose up -d<\/code> \u52a0\u5165 <code>\/etc\/rc.local<\/code> \u6216 systemd \u670d\u52a1<\/td>\n<\/tr>\n<tr>\n<td>\u6027\u80fd\u76d1\u63a7<\/td>\n<td>\u5b89\u88c5 <code>netdata<\/code> \u5b9e\u65f6\u67e5\u770b GPU \u4f7f\u7528\u7387<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h2>\ud83d\udd10 \u5b89\u5168\u63d0\u9192<\/h2>\n<ul>\n<li><code>.env<\/code> \u6587\u4ef6\u5305\u542b\u5bc6\u7801\uff0c\u8bf7\u52ff\u63d0\u4ea4\u5230 Git<\/li>\n<li>\u751f\u4ea7\u73af\u5883\u5efa\u8bae\u5f00\u542f TLS \u52a0\u5bc6\uff08\u8bbe\u7f6e\u8bc1\u4e66\uff09<\/li>\n<li>\u4f7f\u7528\u9632\u706b\u5899\u9650\u5236 <code>8083<\/code> \u548c Sunshine \u7aef\u53e3\u7684\u8bbf\u95ee\u8303\u56f4<\/li>\n<li>\u5b9a\u671f\u66f4\u65b0\u955c\u50cf\u548c\u7cfb\u7edf\u8865\u4e01<\/li>\n<\/ul>\n<hr \/>\n<h2>\ud83d\udcda \u53c2\u8003\u8d44\u6599<\/h2>\n<ul>\n<li>GitHub \u9879\u76ee\u4e3b\u9875\uff1a<a href=\"https:\/\/github.com\/Steam-Headless\/docker-steam-headless\">https:\/\/github.com\/Steam-Headless\/docker-steam-headless<\/a><\/li>\n<li>\u5b98\u65b9ubuntu\u6559\u7a0b\uff1a<a href=\"https:\/\/github.com\/Steam-Headless\/docker-steam-headless\/blob\/master\/docs\/docker-compose.md\">https:\/\/github.com\/Steam-Headless\/docker-steam-headless\/blob\/master\/docs\/docker-compose.md<\/a><\/li>\n<li>docker compose \u914d\u7f6e\uff1a<a href=\"https:\/\/github.com\/Steam-Headless\/docker-steam-headless\/blob\/master\/docs\/ubuntu-server.md\">https:\/\/github.com\/Steam-Headless\/docker-steam-headless\/blob\/master\/docs\/ubuntu-server.md<\/a><\/li>\n<li>NVIDIA Container Toolkit \u5b98\u65b9\u6587\u6863\uff1a<a href=\"https:\/\/docs.nvidia.com\/datacenter\/cloud-native\/container-toolkit\/latest\/install-guide.html\">https:\/\/docs.nvidia.com\/datacenter\/cloud-native\/container-toolkit\/latest\/install-guide.html<\/a><\/li>\n<li>\u4e2d\u6587\u6559\u7a0b\u53c2\u8003\uff1a<a href=\"https:\/\/zhuanlan.zhihu.com\/p\/689473287\">\u77e5\u4e4e\u6587\u7ae0 &#8211; \u642d\u5efa Steam Headless\u670d\u52a1\u5668<\/a><\/li>\n<\/ul>\n<hr \/>\n","protected":false},"excerpt":{"rendered":"<p>\u6700\u8fd1\u5728 B\u7ad9 \u4e0a\u5076\u7136\u53d1\u73b0\u4e00\u4e2a\u540d\u4e3a Steam-Headless \u7684\u5f00\u6e90\u9879\u76ee\uff0c\u5b83\u5141\u8bb8\u6211\u4eec\u5c06\u4e00\u53f0\u5e26\u663e\u5361\u7684\u670d\u52a1\u5668\u53d8\u6210&#8230; &raquo; <a class=\"read-more-link\" href=\"https:\/\/apifj.com\/index.php\/2025\/08\/25\/zhetengrijizai-ubuntu-shangdajian-steam-headless-wutouyouxifuwuqinvidia-docker-novnc\/\">\u9605\u8bfb\u5168\u6587<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-347","post","type-post","status-publish","format-standard","hentry","category-dl"],"_links":{"self":[{"href":"https:\/\/apifj.com\/index.php\/wp-json\/wp\/v2\/posts\/347","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/apifj.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/apifj.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/apifj.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/apifj.com\/index.php\/wp-json\/wp\/v2\/comments?post=347"}],"version-history":[{"count":4,"href":"https:\/\/apifj.com\/index.php\/wp-json\/wp\/v2\/posts\/347\/revisions"}],"predecessor-version":[{"id":351,"href":"https:\/\/apifj.com\/index.php\/wp-json\/wp\/v2\/posts\/347\/revisions\/351"}],"wp:attachment":[{"href":"https:\/\/apifj.com\/index.php\/wp-json\/wp\/v2\/media?parent=347"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/apifj.com\/index.php\/wp-json\/wp\/v2\/categories?post=347"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/apifj.com\/index.php\/wp-json\/wp\/v2\/tags?post=347"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}