一般路过棕背伯劳

一般路过棕背伯劳

SteamDeck使用SMB共享文件夹以及无法访问的解决方案

2024-02-16

由于我使用steamdeck时有打mod的需求,而steamdeck下载文件与传输其实并不方便。因此我决定使用我的电脑下载与管理文件。这样也方便未来重置系统时,可以快速恢复安装的状态。

安装与启用SMB

Samba可以使Linux和Windows设备在局域网中互相传输文件与共享打印机。(当然,别傻傻的在国际互联网上暴露你的端口)

steamdeck安装Samba需要启用pacman吃豆人包管理器。

不建议的安装方式

# 修改用户密码(此处无需使用sudo,需要输入两次。输入过程中不显示)
passwd

# 关闭SteamOS的只读设置
sudo steamos-readonly disable

# 刷新库缓存
sudo pacman -Ssy
# 初始化 pacman 密钥环
sudo pacman-key --init
# 用默认的 Arch Linux 密钥填充 pacman 密钥环
sudo pacman-key --populate archlinux

建议的安装方式

解决SteamOS系统更新造成软件包消失问题的方法

↑↑↑↑↑↑↑↑↑↑终极解决方案↑↑↑↑↑↑↑↑↑↑

启用pacman完成后,安装并启用Samba

# 安装Samba
sudo pacman -S samba

# 使用systemd,让SMB服务实现开机启动
sudo systemctl enable --now smb

# 配置文件
sudo nano /etc/samba/smb.conf

解决SteamOS系统更新造成软件包消失问题的方法

以下是我的配置文件

[global]
   workgroup = WORKGROUP
   server string = Samba Server
   server role = standalone server



[Steam]
   path = /home/deck/.local/share/Steam
   writable = yes

[homes]
   comment = Home Directories
   browseable = no
   writable = yes

配置完成后,使用systemctl重启smb就完成了

sudo systemctl restart smb

解决新版本SteamOS防火墙导致无法使用的问题

旧版本的SteamOS完成上述步骤之后,使用windows的映射网络驱动器就可以正常访问文件夹与管理文件了。但是新版本的系统(不确定是哪个版本开始的)加入了防火墙。只开放了部分常用端口(比如ssh的22端口),SMB使用的445端口并没有开放。

可能是出于安全性的考虑,因为之前大名鼎鼎的“永恒之蓝”就是使用445端口传播。

发现问题的过程

在我映射网络驱动器失败后,我尝试使用nmap扫描了steamdeck的端口情况

nmap -T4 -A -v steamdeck

# 结果如下
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 9.3 (protocol 2.0)
| ssh-hostkey: 
|   256 35:ba:d3:6f:75:fc:9f:e3:a4:b7:0d:b6:13:aa:56:72 (ECDSA)
|_  256 e6:df:e5:84:cc:df:fb:12:6c:af:d9:7e:af:74:fd:06 (ED25519)
5357/tcp open  http    BaseHTTPServer 0.6 (Python 3.11.3)
|_http-server-header: BaseHTTP/0.6 Python/3.11.3
| http-methods: 
|_  Supported Methods: POST
|_http-title: Error response

可以确定,确实没有将SMB服务需要的445/TCP映射出来

解决方案1·临时关闭防火墙

这个方法通过临时关闭防火墙(重启后会自动启动)来实现短时间内的访问

sudo systemctl stop firewalld

解决方案2·添加防火墙规则

通过增加防火墙规则,开放445/TCP,可以实现永久的smb访问。但是带来的安全问题需要斟酌。

如果通常来讲是在自己熟悉的网络环境下使用steamdeck,那么添加防火墙规则是一劳永逸的行为。

# 添加开放TCP协议445端口的规则
sudo firewall-cmd --permanent --add-port=445/tcp

# 重启防火墙
sudo systemctl restart firewalld.service

最终效果

再次通过nmap扫描

PORT     STATE SERVICE     VERSION
22/tcp   open  ssh         OpenSSH 9.3 (protocol 2.0)
| ssh-hostkey: 
|   256 35:ba:d3:6f:75:fc:9f:e3:a4:b7:0d:b6:13:aa:56:72 (ECDSA)
|_  256 e6:df:e5:84:cc:df:fb:12:6c:af:d9:7e:af:74:fd:06 (ED25519)
445/tcp  open  netbios-ssn Samba smbd 4.6.2
5357/tcp open  http        BaseHTTPServer 0.6 (Python 3.11.3)
|_http-server-header: BaseHTTP/0.6 Python/3.11.3
| http-methods: 
|_  Supported Methods: POST
|_http-title: Error response

电脑也可以正常映射网络驱动器了~