Linux上讓Proton + FF16能流暢游玩的一些小筆記

是的,雖然我相信會在Linux桌機上玩FF16的人應該並沒有那麼多,但是總會有的對吧?而且說不定也會有Steam Deck玩家會想嘗試…
總之先做一份我目前為止做過的所有事的筆記。
在開始之前,先分享一下我的目前電腦配置:

OS: Ubuntu 24.04.1 LTS(64 位元)
KERNEL: 6.8.0-49-generic
CPU: AMD Ryzen 7 5700X 8-Core
GPU: NVIDIA GeForce RTX 4060 Ti
GPU DRIVER: NVIDIA 560.35.03
GPU: RAM: 32 GB

按照我這個配置,在Windows上是可以用Ultra畫質流暢游玩FF16的,然而在Linux上就是不知為何會在造訪城鎮時卡頓無比。為了解開問題,我嘗試了以下幾種做法:
1. 調低畫質 - 並沒有用。就算設定成中或者低畫質,遊戲在到達城鎮和部份地區時還是會連30FPS都達不到。(其他時侯倒是穩定60FPS)
2. 將驅動程式更新到最新版本 - 似乎也沒有用。目前Ubuntu官方提供的NVIDIA驅動是550,但為了試驗560是否能改善FF16的FPS問題,我特地升級到了還在Beta中的560版本了。
(更新方法請參考:NVIDIA-Ubuntu-Driver-Guide

3. 修改啟動選項 - 有用!雖然不至於讓FPS回復到60,但是能感受到明顯的改善,不會卡頓到難以游玩。

使用的選項為:WINEDLLOVERRIDES="dinput8=n,b" %command%

4. 調整遊戲設定 - 效果最好!因為我留意到遊戲發生卡頓的時侯,幾乎都是在NPC數量比較多的城鎮裡,因此在遊戲設定裡將”NPC人數”設定為低….結果現在就算畫質設定成高,也能在城鎮裡姅用60FPS走動了。

這是CPU的問題嗎?亦或是顯示卡那一側的問題呢?答案目前不得而之,但最少可以愉快地玩了….

用Rust讀取JSON File的方法

最近沉迷學習Rust,但網絡上的教學很多都比較簡單,而且中文教學資源感覺也不多….所以稍微再寫一些這方面的文章!
在使用Rust時,我想大家最常踩的其中一個坑應該是「讀取JSON File」吧。
Rust似乎沒有自帶的JSON讀寫功能的,所以在這裡推薦一款名為serde_json的第三方套件,應該能滿足許多的要求:
https://crates.io/crates/serde_json/1.0.1/dependencies

以下是使用serde_json的簡單例子(假設這個Json file是在Main 以外的Function裡讀取的):

fn get_json() -> std::io::Result{
let file = File::open("target.json").unwrap();
let reader = BufReader::new(file);
let json: serde_json::Value = serde_json::from_reader(reader)?;
Ok(json)
}

這段程式碼回傳的會是Value值,裡面包含了”target.json”裡面的一切內容。要使用回傳的這個Value也很簡單,

let json_value = get_json();
let json_content = json_value.unwrap();

在unwarp過後,我們就可以按需要將它轉換成所需要的格式:

//Read the array from the Json "Object"
let json_content_object = json_content.as_object().unwrap();

//Read the array from the Json "Array"
let json_content_array = json_content.as_array().unwrap();

之後的存取方法,基本上就跟Rust自帶的Array和Object差不多了。

如果想要更具體一些的例子,可以參考我的Rust Telegram Bot專案(整體未完成,但是JSON讀取的部份已經完整了):
https://github.com/falconshark/eorzea-fishwatcher

祝各位Rust愉快!

分享一些Rust的便利小套件

自從住在日本之後,開始嘗試參加一些當地程序員的社群活動,其中最有參與感的就是Rust Ladies!
跟程度差不多的人一起學習和研究Rust的感覺真的很好,於是也嘗試更進一步地用Rust寫些Side Project了(笑)

在學習過程中發現Rust也有一些挺好用的套件和工具,於是在此分享一下:

1. dotenv
在開發的時侯,雖然設定檔用JSON或者ini會是最直觀和快捷的方法,
但如果日後想要在Docker環境下執行程序的話,採用.env 或者環境變數來輸入設定,還是會更為方便一些。
而為了讓Rust程序可以讀取.env檔案,可以使用dotenv這個套件:
https://crates.io/crates/dotenv


extern crate dotenv;
use dotenv::dotenv;
fn main() {
dotenv().ok();
}

安裝後,只要像以上的官方範例那樣使用dotenv()這個Method,就能自動讀取.env檔案的內容,當成普通的環境變數使用了。超方便的!

2. cargo-watch
不管是哪種程式語言,總會遇到每次修改完之後都得重新加載,浪費時間的問題…Rust當然也不例外。
而且Rust跟JS和PHP不同,在運行之前是需要編譯的;這就更加費時間了。
不過只要有cargo-watch,就能每次修改完程序文件之後自動重新編譯和運行,能夠省下許多功夫啦!
https://crates.io/crates/cargo-watch

在一般用cargo run來運行Rust程式的情況下,可以用以下指令來達到以上提到的效果:
cargo watch -- cargo run

但從官方文檔看來,應該是還有很多種用法….不過大概需要慢慢研究了。

這篇文章也應該會有後續更新,總之現在先以用Rust寫出一個Telegram機器人為目標!

利用Neutralino和Vue輕鬆開發跨平台桌面應用程式

Neutralino是什麼?

自從有了Electron後,以往許多只在Windows上推出桌面應用程式的軟體都紛紛推出Mac和Linux版,讓在這兩個平台上工作變得簡單和舒服了許多;這都是多虧了它的跨平台性所賜。

大家常用的Vscode Studio,也是利用它開發出來的。

然而Electron有一個讓人恨到極點的缺點:那就是它會將網頁(應用程式內容)和顯示內容用的瀏覽器(Chromium)打包在一起,也就讓每一個Electron應用都胖得要死!於是雖然它能讓開發者輕鬆開發跨平台應用,也能利用HTML + JS + CSS 如同寫網頁那般隨意地製作GUI,但也遂漸被重視性能和輕巧的人們敬為遠之。而針對這個問題誕生的,正是Electron的替代品--Neutralino。

Neutralino是一款主打輕量化的桌面應用開發框架,它在功能上基本跟Electron差不多,但不會像前者那樣把Chromium與應用打包在一起,而是會使用系統內建的瀏覽器內核(例如在Windows上會使用Edge)來渲染內容,如此一來就能保證速度之餘達到輕量化的效果。(關於Neutralino和其他同類框架之間的性能比較,請參考這裡 。)

由於Neutralino同時支援純Javascript和前端框架開發,本篇文章主要講述如何利用NeutralinoJS和VueJS,構建屬於自己的跨平台桌面應用程式。

1. 安裝Neutralino的命令行工具:
npm install -g @neutralinojs/neu

2. 運行前面安裝的命令行工具,建立Neutralinojs的空白模板:

neu create [專案名稱] --template neutralinojs/neutralinojs-zero

3. 進入資料夾,移除空白模板內的網頁內容:
cd ./[專案名稱]
rf www

4. 建立存放Vue專案的資料夾替代之,並將專案命名為”vue-src”:
npm create vue@latest

5. 編輯neutralino.config.json,修改Neutralino的設定內容。
主要需要修改的有圖中”title”,”documentRoot”, “resourcesPath”,”clientLibrary”和”icon”的部份:
“title” 是你的應用程式名稱,”documentRoot” 是存在應用內容的地方,因此需要改成”/vue-src/dist”,讓Neutralino讀取已經Build好的Vue專案內容;”resourcesPath”也是同理。
”clientLibrary”則是指Neutralino API庫的位置(我選擇放在/vue-src/public/內)。
雖然沒有它一切也能正常運作,但就會無法存取像是儲存檔案,開啟檔案等API,也就無法像一個真正的本地應用那樣工作了。
至於”icon”,自然就是你的應用ICON路徑了。由於剛開始應該沒有專用的icon,可以先用Vue預設的Favicon(/vue-src/public/favicon.ico)代替。
最終設定應該會像這樣:
6. 下載Neutralino API庫:

neu update

7.  構建Vue專案內容:
cd ./vue-src
npm install
npm run build

8. 回到專案頂層資料夾,運行Neutralino:
cd ..
neu run

登登!大功告成!之後的開發基本上跟平常的Vue應用差不多,但如果需要用到本地應用的API(例如儲存檔案,打開檔案等),就需要參考官方文檔了。

更完整的例子可以參考我寫的這個簡易To-Do-List應用:

https://github.com/falconshark/Neutralino-To-Do/

祝各位開發愉快!

Linux上如何讓OSB只錄制特定軟體的聲音

坦白說,這個問題已經困擾了我很多年了。

因為我自己現在差不多每晚都會跟朋友語音,然後各自在玩自己的遊戲;但有些時侯我又想直播自己玩的過程,而不想讓外人聽見語音內其他人的對話內容….但OBS本身只能選擇錄取不同輸出裝置的聲音,所以根本沒法做到這一點。直到今天靈機一動跑去Stackoverflow上去查,才發現原來Linux是可以用創建”虛擬輸出裝置(Virtual Audio)來達成效果的!

而且做法也非常簡單,只要一行指令就行了:
pactl load-module module-virtual-sink sink_name=VAC_1to2


完成後打開系統上的混音控制器,需要錄音的軟體的輸出裝置更改為剛才新建的Virtual Audio(圖中的Virutal Sink VAC)

再在OBS上將”輸出音效”的音量調至最低,然後新增使用裝置為”Virutal Sink VAC”的”音效輸出”來源即可。

煩惱了這麼久的我,真的是傻瓜….

(後補備註:這個方法在每次重新開機或者更改輸出音效裝置時便會失效,所以最好寫一段腳本方便日後重新啟動虛擬裝置喔)

參考來源: Virtual Audio Cable For Ubuntu

在Linux上輕鬆暢玩帶模組的致命公司

距離致命公司推出一段時間,雖然熱潮已經稍微減退,但在模組的幫助下還是有不少人跟我一樣仍然沉迷在其中。

不過對於使用Linux的人來說,即使Proton能讓我們正常遊玩遊戲,但要使用模組就多少要稍微下些功夫了。

1. 首先,我們需要先安裝Protontricks。它能讓我們方便修改Proton遊戲的Wine設定,使模組框架BepInEx能夠正常運行:
flatpak install flathub com.github.Matoking.protontricks

(使用此指令前需要先安裝Flatpak)

2. 安裝後啟動Protontricks,選擇Lethai Company

3. 選擇”執行預設容器:

4. 再選擇”執行Wine設定程式”:

5. 在Wine設定的”函式庫”裡,新增”winhttp”的函式庫覆寫:

6. 完成後,你的致命公司就能正常啟動BepInEx了。至於安裝BepInEx的方法,則是到其官網Github下載最新版(例如目前是BepInEx_x64_5.4.22.0)
https://github.com/BepInEx/BepInEx/releases

至於遊戲模組本身,則是解壓縮至BepInEx/Plugin資料夾下即可。

7. 啟動遊戲後,只要看到這個BepInEx的小黑窗就代表成功了!

另外也在這篇文章裡推薦一下R2modman這款軟體--它是一款開源的遊戲模組管理器,不但能允許你直接透過Thunderstore平台下載不同遊戲的模組,亦可以按照需要分成不同的遊戲Profile以方便在不同場合使用各自的遊戲模組,甚至將這些Profile匯出分享給其他人,與朋友一起打遊戲時特別方便!

https://github.com/ebkr/r2modmanPlus

享受快樂的遊戲吧!

在Linux上成為Vtuber吧!(VTube Studio)

將Linux當作日常主要作業系統的我,現在已經幾乎所有的事情都能在這上面做,不需要特別切換到Windows系統了。跟我有一樣習慣的人相信也很多,其中也許都想過一個問題:我能在Linux上披上皮套,成為一名Vtuber / 實況主嗎?

答案當然是:可以!

為了做到這點,我們需要的工具有三款:目前十分流行的VTuber軟件VTube Studio,OpenSeeFace以及OBS(Open Broadcaster Software)。

1. 首先,我們需要先安裝VTube Studio。由於它本身並不支援Linux系統,因此我推薦透過Steam進行下載和安裝,方便使用Proton啟動軟體。

2. 下載完畢後,在遊戲清單上選取”VTube Studio”後右鍵,選取”內容”。

3. 點擊”相容性”選項,勾選”強制使用特定Steam Play相容性工具”,選擇使用”Proton Experimental” 開啟遊戲。

4. 確認VTube Studio能正常啟動後,就可以開始準備下一步。(有時侯VTube Studio可能會啟動失敗,這種時侯通常只要重新啟動一次就沒有問題)

在下一階段,我們需要準備的是一款臉容捕捉軟體:OpenSeeFace。

為什麼我們需要OpenSeeFace呢?這是因為VTubeStudio自帶的臉容捕捉並不能在Linux上正常運作,因此必須靠外部的軟體完成臉容捕捉,再將結果傳送到VTubeStudio以達到「虛擬人偶配合本人表情變化/移動」的效果。(而且它是Open Source的喔!)

5. 要使用OpenSeeFace,我們需要先從Gtihub上下載它,準備好所需環境:(主要是Python3相關的)

sudo apt-get install python3 python3-pip python3-virtualenv git
git clone https://github.com/emilianavt/OpenSeeFace
cd OpenSeeFace
virtualenv -p python3 env
source env/bin/activate
pip3 install onnxruntime opencv-python pillow numpy

6. 然後在OpenSeeFace 資料夾下,啟動虛擬的Python環境:

venv/bin/activate

7. 再使用以下指令啟動裡面的facetracker.py即可。其中可能需要調整的參數,主要是其中的”-c”--它的作用是選擇要使用臉容識別的攝影機,而它們的編號一般可能會是0-2之間,在這個例子裡我使用的是攝影機0,如無法正常啟動OpenSeeFace,可以嘗試將它改為其他數字(例如我自己使用的是攝影機2,所以就是 -c 2)

python facetracker.py -c 0 -W 1280 -H 720 --discard-after 0 --scan-every 0 --no-3d-adapt 1 --max-feature-updates 900 --ip 127.0.0.1 --port 11573

正常啟動的OpenSeeFace會顯示出以下畫面:

8. 而為了能讓VTube Studio 與OpenSeeFace之間互相連接,我們需要做點小手段:在VTube Studio的StreamingAssets資料夾內建立名為”ip.txt”的檔案,路徑如下:

~/.local/share/Steam/steamapps/common/VTube Studio/VTube Studio_Data/StreamingAssets/ip.txt

其內容為

# To listen for remote connections, change this to 0.0.0.0 or your actual IP on the desired interface.
ip=0.0.0.0

# This is the port the server will listen for tracking packets on.
port=11573

它能讓VTube Studio每次啟動時自動連接到已經啟動的OpenSeeFace上,如此一來就能如同在Windows /Mac 時那般正常使用臉容捕捉功能囉。

到這裡,基本上差不多就已經大功告成。最後我們要做的就只剩下OBS的部份,由於網絡上已經有許多關於安裝和使用方面的教學,就不在這裡重覆了;但我會額外再講解一下如何在OBS上消除VTube Studio的背景,使它變成透明。

1. 首先我們先點擊選單上的綠色圓圈,選擇”ColorPicker”為背景,再設定顏色為綠幕:

2.  在OBS裡新增來源:截取視窗,將VTubeStudio設定目標後點擊右鍵,選擇”濾鏡”後新增”色彩鍵”濾鏡,再將關鍵顏色類型調整為”綠色”即可。

登登!大功告成!

在Windows和Mac OS上不需要這樣做,但Linux上的VTube Studio無法在OBS上使用透明背景,因此才會需要用到綠幕。

其實這篇文章本來應該是三個月前寫的,結果拖延症到現在才終於動筆…..一如既往地希望能幫上大家。

參考資料:

A Guide to get VTube Studio and VSeeFace working on Linux. Tested on Arch Linux

https://gist.github.com/BenKato151/b8b4a6897cc6cc7835ac9107288d3df2

別再靠夭Steam Deck一堆遊戲不能玩啦!學會安裝Proton GE

最近終於陸陸續續有朋友收到他們的聖誕禮物--Steam Deck了!看見擁有這台好主機的人增加,我自己心裡也覺得很高興。

然而畢竟Steam Deck自帶的是Steam OS,執行Windows遊戲時會使用名為Proton的中間層,而這不一定每個遊戲都適用,所以勢必會有許多人會心想「嗯?好多遊戲顯示不支援呀!」--這應該是因為Valve在更新Proton上一般會比較保守和緩慢的關係吧。

為了解決這個問題,最好的方法就是安裝Proton-GE。這是Proton 的一個Fork版本,建基在Proton的基礎上改良很多的遊戲相容性,也是為何用上它就能解決Steam Deck跑不動某些遊戲的問題。

安裝方法很簡單:

1. 長按Power鍵,切換至桌面模式

2. 桌面模式的工作列裡,有一個名叫Discover的圖標,點擊它

3. 搜尋名為ProtonUp-Qt的軟件,並且安裝

4. 啟動ProtonUp,之後點擊”Add Version”,選擇默認安裝版本即可

5. 完成安裝後回到遊戲模式,選擇需要使用Proton GE的遊戲,設定=>強制使用指定相容性工具,使用最新安裝的Proton GE

6. 啟動遊戲,盡情玩!

一般而言,大部份遊戲搭配上Proton GE都能正常遊玩,除了目前EA遊戲因為要搭配EA PLAY的關係而有問題外都可以盡情享受 🙂

如果對於遊戲能否在Steam Deck / Linux上順利執行,最好的方法是參考ProtonDB 網站:

https://www.protondb.com/

裡面的內容都是基於使用者回報,提出一些在Steam Deck / Linux上運行遊戲時會遇到的問題和可能的解決方法--如果遇到有些遊戲在Steam Deck上跑會有問題,可以參考看看哦。

祝大家聖誕快樂!

在Ubuntu 22.04 上用Lutris遊玩天翼之鍊

上次成功解決楓之谷的問題令我太開心了,於是又手癢來挑戰在Linux下跑天翼之鍊,結果答案是--不完美,但確實能跑!

以下分享我的做法:

1. 在Ubuntu上面安裝Lutis--下載方法詳見Lutris的官網頁面:

https://lutris.net/downloads

2. 啟動Lutris,在左邊的運行環境裡找到Wine,點擊新增/刪除版本,在Wine版本管理器裡安裝Lutris-4.21(理論上其他的Wine版本也行,但我個人跑老遊戲都是用這個版本的)

3. 下載任何一款天翼之的程式。

4.打開Lutris,點擊右上的選單按鈕,選擇Add Games

5. 輸入遊戲名稱,選擇運行環境為Wine,並設定主程序路徑(即為你的天翼之鍊主程式所在)及容器路徑(個人設定為~/Games/tw)。

容器路徑默認是不在存的,需要手動建立對應的空資料夾喔。

 

6. 切換到系統選項,下滾至最底部,選擇使用Xephyr => 16位

7. 如有亂碼問題,亦可以在系統選項上設定Wine環境的語系--
可以在環境變量裡設定LC_ALL = 指定的語系,也可以從Locale那一欄選擇。

 

8. 由於Xephyr的新版不支援滑鼠輸入,所以需要下載1.19.6版的Xephyr並安裝:

https://packages.ubuntu.com/bionic/amd64/xserver-xephyr/download

 

9.安裝完畢後啟動遊戲,現在應該能玩了!雖然會有文字被反白的問題,也無法使用全屏環境而不太完美,但最少….能玩!

 

祝各位遊玩愉快~

在Ubuntu 22.04 上用Lutris遊玩楓之谷(冒險島)

最近看見有朋友在回鍋玩楓之谷,於是便突發奇想打算試試看能不能在Ubuntu上順利跑這款遊戲,結果卻發現問題比想像中多…..
但作為Linux Gamer自然是不會輕易放棄的!為了找出解決方法而谷歌了一下,才發現原來有人在Mac上用Wine成功運行楓之谷,參考他們的做法就終於找出能在Linux順跑這遊戲的方法了~在此分享一下給可能遇到同樣問題的大家。

1. 在Ubuntu上面安裝Lutis--下載方法詳見Lutris的官網頁面:

https://lutris.net/downloads

2. 啟動Lutris,在左邊的運行環境裡找到Wine,點擊新增/刪除版本,在Wine版本管理器裡安裝Lutris-4.21

3. 下載任何一款楓之谷的程式。(個人玩的是夢時代楓之谷,但理論上應該其他版本的楓之谷也能應用這個方法)

4.打開Lutris,點擊右上的選單按鈕,選擇Add Games

5. 選擇手動配置遊戲運行環境

6.  輸入遊戲名稱,選擇運行環境為Wine,並設定主程序路徑(即為你的楓之谷登入器/主程式所在)及容器路徑(個人設定為~/Games/story)。

容器路徑默認是不在存的,需要手動建立對應的空資料夾喔。

 

7. 點擊保存後,打開終端機輸入以下指令安裝運行楓之谷所需的額外套件:

export WINEPREFIX=~/Games/story

winetricks corefonts vcrun6

(~/Games/story 的部份請替換成你在上一步指定的容器路徑)

 

8. 完成後回到Lutris,啟動楓之谷!此時遊戲應該就能正常運行了,祝你遊玩愉快~

 

參考資料:

夢時代-Mac版安裝執行教學

Mac版安裝執行教學 (Running DMS on Mac)