Skip to content

Instantly share code, notes, and snippets.

@spiderbala
Last active June 11, 2024 14:54
Show Gist options
  • Save spiderbala/55804afd029c64175664353e9bbdf069 to your computer and use it in GitHub Desktop.
Save spiderbala/55804afd029c64175664353e9bbdf069 to your computer and use it in GitHub Desktop.
Steam Deck 安裝samba文件分享協定,自動化腳本(包含samba反安裝腳本)
#!/bin/bash
# 將用戶密碼用作此次腳本的變量,免於後續多次重覆輸入密碼
read -s -p "輸入用戶密碼: " user_password
echo
# 解除唯讀模式
if echo "$user_password" | sudo -S steamos-readonly disable; then
echo
echo "唯讀模式已解除"
else
echo -e "\e[93m密碼輸入錯誤,腳本終止。\e[0m"
exit 1
fi
# 刪除fakeroot.conf(模擬root權限的設定)。SteamOS更新系統後若samba失效,有時得刪除此檔才能順利重裝
sudo rm -rf /etc/ld.so.conf.d/fakeroot.conf
# 刪除所有密鑰
sudo rm -rf /etc/pacman.d/gnupg
# 初始化pacman密鑰,用於驗證軟件包的簽證
sudo pacman-key --init
# 使用默認的Arch Linux密鑰替代
sudo pacman-key --populate archlinux
sudo pacman-key --populate holo
sudo pacman -Scc --noconfirm
# 更新 Archlinux-keyring 套件
sudo pacman -Sy archlinux-keyring --noconfirm
# 刷新pacman(套件管理工具)
sudo pacman -Syu --noconfirm
# 安裝samba文件分享協定
sudo pacman -S samba --overwrite '*' --noconfirm
# 編寫samba配置文件
echo "
[global]
workgroup = WORKGROUP
server string = Samba Server
server role = standalone server
[Homes]
comment = Home Directories
browseable = no
writable = yes
[Steam]
path = /home/deck/.local/share/Steam
writable = yes
[GAME_Folder]
path = /home/deck/.local/share/Steam/steamapps/common
writable = yes
[Mount_Point]
path = /run/media
writable = yes
#要再新增共享資料夾,可以依如下格式以及範例(使用時#符號要刪掉)
#[自己取資料夾名稱]
#path = 資料夾路徑
#writable = yes
#[Screenshot]
#path = /home/deck/.local/share/Steam/userdata/用戶名/760/remote
#writable = yes
#[Userdata]
#path = /home/deck/.local/share/Steam/userdata/用戶名
#writable = yes
#[Compatdata]
#path = /home/deck/.local/share/Steam/steamapps/compatdata
#writable = yes
#[自己掛載點上的裝置]
#path = /run/media/自己的裝置名稱
#writable = yes
" | sudo tee /etc/samba/smb.conf
# 安裝yay(由社群維護的軟件儲存庫)
sudo pacman -S --needed git base-devel --noconfirm
git clone https://aur.archlinux.org/yay-bin.git
chmod a+rwx yay-bin
cd yay-bin
makepkg -si --noconfirm
# 更新yay
yay --noconfirm
# 安裝wsdd 網路探索服務
yay -S wsdd --overwrite '*' --noconfirm
# 刪除yay暫存檔
cd ..
rm -rf yay-bin
# 新增使用者 deck 為samba服務的默認使用者名稱
echo "替Samba用戶“deck“設置為steam deck用戶相同的密碼"
echo -e "$user_password\n$user_password" | sudo smbpasswd -a deck
# 啟用samba服務
echo 啟用文件分享服務
echo "$user_password" | sudo -S systemctl start smb
# 設置samba服務為開機自啟
echo 設置文件分享服務為開機自啟
echo "$user_password" | sudo -S systemctl enable smb
# 啟用wsdd服務
echo 啟用網路探索服務
echo "$user_password" | sudo -S systemctl start wsdd
# 設置wsdd服務為開機自啟
echo 設置網路探索服務為開機自啟
echo "$user_password" | sudo -S systemctl enable wsdd
# 啟用Samba防火牆端口
sudo firewall-cmd --permanent --add-service=samba
# 重新加載防火牆規則
sudo firewall-cmd --reload
# 重啟唯讀模式
echo "$user_password" | sudo -S sudo steamos-readonly enable
echo 唯獨模式已重啟
echo -e "\e[93msamba文件分享協定已設定完成,可以關閉終端機了,稍待10秒防火牆設置完成即可使用\e[0m"
#!/bin/bash
# 將用戶密碼用作此次腳本的變量,免於後續多次重覆輸入密碼
read -s -p "輸入用戶密碼: " user_password
echo
# 解除唯讀模式
if echo "$user_password" | sudo -S steamos-readonly disable; then
echo
echo "唯讀模式已解除"
else
echo -e "\e[93m密碼輸入錯誤,腳本終止。\e[0m"
exit 1
fi
# 關閉wsdd服務
echo 關閉網路探索服務
echo "$user_password" | sudo -S systemctl stop wsdd
# 關閉samba文件分享服務
echo 關閉文件分享服務
echo "$user_password" | sudo -S systemctl stop smb
# 卸載wsdd網路探索服務
yes | sudo pacman -R wsdd
# 卸載yay軟件儲存庫助手
yes | sudo pacman -R yay-bin
# 卸載samba文件分享協定
yes | sudo pacman -R samba
# 移除samba配置文件
sudo rm -rf /etc/samba
# 移除samba防火牆端口
sudo firewall-cmd --permanent --remove-service=samba
# 重新加載防火牆規則
sudo firewall-cmd --reload
# 重啟唯讀模式
echo "$user_password" | sudo -S sudo steamos-readonly enable
echo 唯獨模式已重啟
echo -e "\e[93msamba文件分享協定刪除完成,可以關閉終端機了\e[0m"
@spiderbala
Copy link
Author

spiderbala commented Jan 18, 2023

在Steam Deck上安裝samba文件分享協定,透過腳本省去逐行執行指令的麻煩,腳本已優化只需輸入一次密碼即可,且適用目前添加防火牆的Steam 3.5.5版

比較直接的使用方式為右鍵點擊Raw,選擇"另存連結為...",下載後的.sh腳本放在steamos用戶擁有權限的地方都可以,然後對文件右鍵>屬性,到權限分頁把執行權限打勾然後確定,然後再次右鍵,選擇在終端機執行即可。

比較實用的就是設定steam截圖資料夾,Steam Deck遊戲中截圖不必退出,也不必上傳到線上圖庫,就能立刻在Windows中存取截圖,但每個人的steam用戶編號不同,需再自己修改smb.conf設定檔案,裡面已經預先寫好了可能常用的範本參數。另外,也能從桌機輕鬆的瀏覽Steam Deck上的遊戲資料,讓你直接替Steam Deck上的遊戲裝漢化、裝MOD、抓存檔等等,而不必透過Steam Deck小螢幕操作。

smb.conf就是負責分享文件參數的檔案,要編輯可到steamos桌面模式,找到/etc/samba/smb.conf,編輯好後會要求輸入用戶密碼,授予編輯權限。

不想用了、設定亂掉了,或是安裝失敗了,也另外提供了反安裝腳本,期間會要求3次用戶權限輸入密碼,刪除的時間很短不會等太久。

腳本功能介紹以及解說,可以參考這部影片
https://youtu.be/ZWPpD2dpNLg

@spiderbala
Copy link
Author

傳輸大檔案到Steam Deck上的分區、隨身碟或SD卡,若提示出現容量不足,就不能從[Mount_Point]進去
必須另外針對它們個別設立分享資料夾,否則系統會判斷錯誤的容量空間

@zhengyi0414
Copy link

需要更新脚本了,不确定是否是用这个脚本卸载导致我LIB库有缺失pacman和sudo权限都没了- -,费了好大劲修好。
另外3.55版本有防火墙了需要关闭。

@spiderbala
Copy link
Author

spiderbala commented Nov 20, 2023

已更新並優化腳本,不再需要多次的輸入用戶密碼,腳本適用目前的steam 3.5.5版本

若之前有使用samba的用戶,從steam 3.4版升級至3.5.5版後,重新安裝samba不明原因導致sudo最高權限指令以及pacman損毀
請使用steam deck還原映像檔,製作復原映像檔的隨身碟,然後進到EFI引導選擇介面,用隨身碟啟動到復原模式,然後選擇Reinstall Steam OS
這會重裝steamOS為舊版,之後再連上網路重新升級為3.5.5版即可修復完成
steam的用戶/玩家資料都會保留,包含steam已安裝的遊戲,steam deck已安裝的軟體,home資料夾底下的資料等等
有影響的只有home之外的資料,比如假如有編輯fstab檔案,有裝rEFInd腳本等等,要重新設定重跑腳本

關於使用steam deck還原映像檔,可以參考這部影片的21:15處,進到還原系統後,選擇Reinstall Steam OS即可
https://youtu.be/CAkW04juf78?si=mjMiWSMQSnMx1Y5G&t=1275

傳輸大檔案到Steam Deck上的分區、隨身碟或SD卡,若提示出現容量不足,就不能從[Mount_Point]進去
必須另外針對它們個別設立分享資料夾,否則系統會判斷錯誤的容量空間
我另外編寫了範例,可以參考使用
#[自己掛載點上的裝置]
#path = /run/media/自己的裝置名稱
#writable = yes

腳本功能介紹以及解說,可以參考這部影片(有點過時)
https://youtu.be/ZWPpD2dpNLg

@spiderbala
Copy link
Author

需要更新脚本了,不确定是否是用这个脚本卸载导致我LIB库有缺失pacman和sudo权限都没了- -,费了好大劲修好。 另外3.55版本有防火墙了需要关闭。

修復sudo我是用steam deck的還原映像檔,執行Reinstall Steam OS修復的,不然沒有最高權限很難搞...
另外,腳本已更新並優化,只需輸入一次用戶密碼,並且加入samba的防火牆規則,適用目前steam 3.5.5版

@zhengyi0414
Copy link

zhengyi0414 commented Nov 20, 2023 via email

@zhengyi0414
Copy link

感谢作者的付出,deck有了smb就再也回不去了,太方便啦。

@zhengyi0414
Copy link

zhengyi0414 commented Mar 1, 2024

steamOS又更新啦,smb又挂掉。
之前安装过此脚本的,只需执行一下几个步骤:
删除fakeroot,正常安装一遍smb,yay,wsdd等,正常开启smb服务即可。

@zhengyi0414
Copy link

请问我这次安装yay时遇见问题,依赖需要大于6.1版本,该如何解决呢

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment