前往
大廳
主題

踏入linux的世界7--「地平線:西域禁地」太空漫步+沒聲音

Xavier | 2024-03-31 23:28:00 | 巴幣 0 | 人氣 73

今天要來分享的東西跟「地平線:西域禁地」這款遊戲有關,
目前這款遊戲我的總遊戲時數約10個小時,其中steam deck遊玩就佔了9個小時,
為什麼呢?因為遊戲在EndeavourOS上執行時卡關了orz
我花了兩天查找資料,最後才總算是修復到可以遊玩的程度...
以下先分享最後的解法,心得什麼的後面在說。

主要遇到的問題有兩個:
1、整個遊戲運作如同太空漫步一樣,整個是slow motion的狀態。
2、遊戲音樂和音效如同便祕一般出不出來,或是只有出來幾秒後又消失。

第一個問題,解法是將linux核心的clock source更換為tsc。
更換的方式不同的linux發行版可能會不一樣,至少我按照Arch linux wiki上的方式無法更換成功,
後來是到EndeavourOS網站上才找到資料,改法跟Arch linux不同。
首先先到/etc/kernel/下找到一個cmdline的文件,
打開文件,在最後面加入一個空格後輸入「tsc=reliable」並存檔。
打開終端機,輸入指令:sudo reinstall-kernels
(不確定這個步驟的必要性,但EndeavourOS網站是這樣寫的。)
接著將電腦重開機,之後到/sys/devices/system/clocksource/clocksource0/
找到current_clocksource文件,打開看內容是不是tsc,是的話就成功了。
以上步驟的參考網址:

第二個問題,解法是修改pipewire的緩衝區大小,
首先到/usr/share/pipewire/下找到一個pipewire.conf文件,
把這個文件複製到家目錄下~/.config/pipewire,如果資料夾不存在就自己建一個,
然後在~/.config/pipewire打開pipewire.conf,
往下找到#default.clock.min-quantum   = 32
我們要把這個quantum的下限值拉高一點,要拉多高跟每台電腦硬體有關係,
我個人一路從64、128、256試到512才比較沒問題,
所以最後修改參數#default.clock.min-quantum   = 512
然後把前面的#字號拿掉並存檔。重開機。

重開機之後打開終端機,輸入以下指令:
pw-metadata -n settings 0
接著應該會看到以下的訊息:
update: id:0 key:'log.level' value:'2' type:''
update: id:0 key:'clock.rate' value:'48000' type:''
update: id:0 key:'clock.allowed-rates' value:'[ 48000 ]' type:''
update: id:0 key:'clock.quantum' value:'1024' type:''
update: id:0 key:'clock.min-quantum' value:'512' type:''
update: id:0 key:'clock.max-quantum' value:'2048' type:''
update: id:0 key:'clock.force-quantum' value:'0' type:''
update: id:0 key:'clock.force-rate' value:'0' type:''
確認「clock.min-quantum」是不是修改後的512,是的話就成功了。

經過一番折騰,總算是可以順利遊玩「地平線:西域禁地」了...
關於這兩個問題,我自己的理解:
clock source應該是用來作時間計算的一個系統,不確定他是怎麼運作的,
但有文章說TSC是跟著你的CPU時脈跑的,假設時脈是2400Mhz,那他就會每秒計數2400M次,
而我安裝的EndeavourOS預設值是HPET,這個是高精確度的時間計數,
但clock計數的速度會比TSC慢7倍,所以以TSC為基礎設計的遊戲拿HPET clock來作運算的話,
遊戲跑起來就會比原本預想的速度還要慢,就呈現太空漫步的狀態。

而Pipewire的quantum(緩衝區)我就不是很懂了,
網路文章說這個緩衝區越小,聲音的延遲越少,
但如果聲音要處理的東西很多,緩衝區不夠的時候,聲音就會斷斷續續、爆音、無聲,
所以這個quantum要根據每台電腦以及使用情況調整一下。
不過這個quantum原本就設計成變動值,我不知道pipewire是怎麼決定現在要開多少緩衝,
我們能做的就是把下限值拉高,讓他在動態調整的時候不要低於會出問題的值。

linux玩遊戲真的比windows還要不直覺很多,
本來以為學會安裝Proton、用Protontricks設定一些參數、加入啟動選項,
應該就差不多能在linux爽玩遊戲了,結果這次遇到這齣...看來我還太嫩了XD
我還在想說我的電腦雖然是NUC,但再怎麼樣顯卡也是6600M 8G,應該是屌虐steam deck,
怎麼這次steam deck跑了10小時沒問題,我電腦開起來就在太空漫步!?
而且不管哪個Proton版本都沒解,改畫質也沒用,整個黑人問號???
還好問題是解決了,還是有一些人跟我遇到一樣的問題,
也剛好有懂linux的人回應,真的是很幸運啊XD

不過啊...我分享這些linux的東西可能比較不明究理,
就純粹由經驗法則堆疊起來,怎麼作會得到什麼結果,但具體的原因是什麼就不太明白,
畢竟我的初衷只是試圖將linux當成主力OS使用,但本身沒有相關程式設計背景,
關於這樣的分享...不知道會不會被認為太簡陋?
不過也有一部分原因是我要留存紀錄,以備我忘記的時候還可以參考。
這幾個月看了不少linux的文章,尤其是IVON的部落格(因為是中文的比較好理解XD)
深深覺得這些分享的人對linux都有一番自己的見解與堅持,相較之下我確實就普通了許多~

創作回應

揮棒成功
????哈哈師兄只是玩個遊戲何苦呢?? steam deck 順跑一般Linux跑不起來最有名的例子就是Persona 5 royal,剛出就已經deck 認證結果一般pc 沒人可以玩,還是GE 版本事後修正的併到官方去
2024-04-01 22:20:02
Xavier
在linux上玩遊戲是一種醍醐味阿~ 我就很喜歡看著一個新東西逐步茁壯的感覺,像我2017年投入chrome OS的世界,想說Google砸資源大改革有好戲看了,結果最後Google放生了XD 現在linux遊戲界因為steam大力支援而發展起來,我就很想來參一腳看看XD
2024-04-01 23:22:55

更多創作