分類
Linux 软件

Fedora 35 與 Nvidia GPU 驅動

TL;NR

如果電腦開啓了 Secure Boot, 又不想頭痛地處理簽名,可以關掉。然後跟隨這個網頁的方法安裝開源的 Nvidia 驅動: Howto/NVIDIA。或者跟隨這個網頁安裝 Nvidia 官方的驅動:Fedora 36/35/34 NVIDIA [515.57 / 510.73.05 / 470.129.06 / 390.151 / 340.108] Drivers Install Guide。這個網頁裏也有介紹如果禁用 Fedora 自帶的 Nouveau 驅動的方法。

The Story

打算嘗試在 Fedora 上編輯視頻,一番搜索後發現 DaVinci Resolve 好像很強大,而且還有 Linux 的免費版本。下載安裝很順利,但是打開後歡迎頁面是黑屏。禁用 Secure Boot 裝了 rpmfusion 推薦的驅動後可以打開了,但是 GPU 設置成 CUDA 模式提示無法渲染圖像,錯誤編碼 999,改成 OpenGL 模式不報錯,但是連 JPG 圖像的預覽都是花的,我以爲是 rpmfusion 的驅動不行(實際不是)。於是去裝官網驅動,禁用了 Nouveau 驅動後安裝成功,但是 DaVinci 還是無法使用,後來發現可能是筆記本自動選擇顯卡 Optimus 有關,可以參考 OptimusHow to Set Nvidia as Primary GPU on Optimus-based Laptops。我並沒有把 Nvidia 設置爲默認,因爲覺得平常板載就夠了。所以後來我使用環境變量的方法成功運行了 DaVinci Resolve

__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia /opt/resolve/bin/resolve

最後我發現相機拍攝的 mov 視頻文件導入後還是只有音頻,想要編輯的話要先對視頻進行轉碼。而且導出格式也有蠻多限制,所以就放棄了 DaVinci Resolve。

然後我搜索到 Linux 平臺另一款「強大」的視頻編輯器 Lightworks,到官網下載免費版體驗,發現需要註冊,註冊時發現有 recaptcha 人機驗證,我換了好幾個網絡居然都無法通過。無奈從網上找了個安裝包,安裝後打開軟件發現需要登錄才能使用所以還是要註冊。最後是第二天在手機瀏覽器裏註冊成功了。然後發現導出 1080p 的視頻居然是付費版本才有的功能,2022年了喂~

最後我去看 Fedora 的手冊,上面推薦 Kdenlive,從官網直接下載 AppImage 檔直接運行,視頻和圖片都順利導入,導出也都沒有什麼限制,h264、h265、ProRes 全都 OK!而且也支持視頻穩定和關鍵幀調整。雖然兩個視頻漸變過度的 Mixes 操作很怪異,但是至少能達到想要的效果。時間軸的操作可能由於還不會用,所有也感覺不太順手,但是至少可以正常導入、剪輯、調整顏色、加字幕和出片了。

分類
软件

Anuto TD 一個塔防遊戲

Anuto TD 是一款製作精良的塔防遊戲,它「浪費」了我很多時間!

分類
Linux

Fedora 35 安裝 VirtualBox

沒想到給 Fedora 35 安裝 VirtualBox 會遇到這麼一個坑,所以記錄下。如果你的電腦沒有啓用 EFI Secure Boot 應該不會遇到這個問題。報錯信息如下:

vboxdrv.sh: failed: modprobe vboxdrv failed. Please use 'dmesg' to find out why.

There were problems setting up VirtualBox.  To re-start the set-up process, run
  /sbin/vboxconfig
as root.  If your system is using EFI Secure Boot you may need to sign the
kernel modules (vboxdrv, vboxnetflt, vboxnetadp, vboxpci) before you can load
them. Please see your Linux system's documentation for more information.

如果你不想關閉安全啓動,那麼可以按如下步驟來解決:

1, 安裝 mokutil

sudo dnf update
sudo dnf install mokutil

2, 在新文件夾裏創建 RSA 密鑰

sudo -i
mkdir /root/signed-modules
cd /root/signed-modules
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=VirtualBox/"
chmod 600 MOK.priv

3, 準備導入密鑰的密碼,等下重啓電腦後會詢問你設置的密碼。

sudo mokutil --import MOK.der

4, 重啓電腦,電腦會進入一個藍屏,選擇 Enroll MOK --> Continue --> 輸入你剛剛設置的密碼,然後你的電腦會重啓。

5, 進入剛剛的文件夾新建一個腳本。

cd /root/signed-modules
nano sign-virtual-box

腳本內容如下:

#!/bin/bash

for modfile in $(dirname $(modinfo -n vboxdrv))/*.ko; do
  echo "Signing $modfile"
  /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 \
                                /root/signed-modules/MOK.priv \
                                /root/signed-modules/MOK.der "$modfile"
done

如果腳本執行失敗了,可以嘗試運行下面命令,然後根據結果修改上面腳本。

find /usr/src -name signfile

5, 爲腳本增加執行權限並運行。

chmod 700 sign-virtual-box
./sign-virtual-box 

6, 把簽名後的驅動加入內核中就可以了。

modprobe vboxdrv

Ubuntu 用戶可以參考這篇 https://stegard.net/2016/10/virtualbox-secure-boot-ubuntu-fail/。以上解決辦法由 Younes LAB 作答與 Sign virtual box modules (vboxdrv, vboxnetflt, vboxnetadp, vboxpci) Centos 8 - Stack Overflow


從 VirtualBox RPM 源安裝 VirtualBox

由於之前沒有搜到上面的辦法,還以爲是安裝的問題,嘗試了從 VirtualBox RPM 源安裝 VirtualBox,其實是不能解決問題的,但是這裏也記錄一下。

1, 安裝依賴。

sudo dnf -y install @development-tools
sudo dnf -y install kernel-headers kernel-devel dkms elfutils-libelf-devel qt5-qtx11extras

2, 添加VirtualBox RPM 源。

Fedora 36 / Fedora 35:

cat <<EOF | sudo tee /etc/yum.repos.d/virtualbox.repo 
[virtualbox]
name=Fedora $releasever - $basearch - VirtualBox
baseurl=http://download.virtualbox.org/virtualbox/rpm/fedora/35/\$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://www.virtualbox.org/download/oracle_vbox.asc
EOF

Fedora 34:

cat <<EOF | sudo tee /etc/yum.repos.d/virtualbox.repo 
[virtualbox]
name=Fedora $releasever - $basearch - VirtualBox
baseurl=http://download.virtualbox.org/virtualbox/rpm/fedora/34/\$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://www.virtualbox.org/download/oracle_vbox.asc
EOF

Fedora 33:

cat <<EOF | sudo tee /etc/yum.repos.d/virtualbox.repo 
[virtualbox]
name=Fedora $releasever - $basearch - VirtualBox
baseurl=http://download.virtualbox.org/virtualbox/rpm/fedora/33/\$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://www.virtualbox.org/download/oracle_vbox.asc
EOF

3, 導入 VirtualBox GPG 密鑰,確認指紋匹配後按 y。

sudo dnf search virtualbox
Fedora  -  - VirtualBox                                 58  B/s | 181  B     00:03
Fedora  -  - VirtualBox                                906  B/s | 1.7 kB     00:01
Importing GPG key 0x98AB5139:
 Userid     : "Oracle Corporation (VirtualBox archive signing key) <[email protected]>"
 Fingerprint: 7B0F AB3A 13B9 0743 5925 D9C9 5442 2A4B 98AB 5139
 From       : https://www.virtualbox.org/download/oracle_vbox.asc
Is this ok [y/N]: y

4, 安裝 VirtualBox。

sudo dnf install VirtualBox-6.1

5, 把當前用戶添加到 vboxusers 用戶組。

sudo usermod -a -G vboxusers $USER
newgrp vboxusers

然後就可以通過命令 virtualbox 或應用菜單 》System 》Oracle VM VirtualBox來啓動了。但是這個時候還沒有裝 Extension Pack,表現爲虛擬機只支持 USB 1.1,屏幕無法縮放。好在擴展包直接從官網下載就可以,然後直接雙擊就能順利運行安裝。

此安裝教程來自 How To Install VirtualBox 6 on Fedora 36/35/34/33/32 - ComputingForGeeks

分類
软件

Mozilla的開源語音轉文字庫DeepSpeech

DeepSpeech 是一個開源的語音文字引擎,使用的是基於百度深度語音研究論文的機器學習技術訓練的模型。DeepSpeech 項目使用谷歌的 TensorFlow,以使實施更加容易。

#https://deepspeech.readthedocs.io/en/r0.9/?badge=latest
# 創建一個虛擬環境
virtualenv -p python3 $HOME/tmp/deepspeech-venv/
source $HOME/tmp/deepspeech-venv/bin/activate

# 安裝 DeepSpeech
pip3 install deepspeech

# 下載預編譯都英文模型文件
curl -LO https://github.com/mozilla/DeepSpeech/releases/download/v0.9.3/deepspeech-0.9.3-models.pbmm
curl -LO https://github.com/mozilla/DeepSpeech/releases/download/v0.9.3/deepspeech-0.9.3-models.scorer

# 下載測試音頻文件
curl -LO https://github.com/mozilla/DeepSpeech/releases/download/v0.9.3/audio-0.9.3.tar.gz
tar xvf audio-0.9.3.tar.gz

# 把音頻文件轉換成文字
deepspeech --model deepspeech-0.9.3-models.pbmm --scorer deepspeech-0.9.3-models.scorer --audio audio/2830-3980-0043.wav

使用 DeepSpeech 轉換法語

DeepSpeech 目前只預先訓練了英語和漢語普通話,如果要轉換法語,可以使用 Common Voice 下的 commonvoice-fr 中都模型。轉到發佈頁面,下載 model_tensorflow_fr.tar.xz 這個文件即可。實際使用中,你可能需要需要安裝 ffmpeg 和 vox 來轉換 mp3 格式都音頻文檔。轉換後的文字沒有段落,需要手動分段。

sudo dnf install ffmpeg sox
ffmpeg -i speech.mp3 speech.wav
deepspeech --model output_graph.pbmm --scorer kenlm.scorer --audio audio/speech.wav > speech.txt

如果想要把文字轉換成語音,可以使用Mozilla 的開源文字轉語音庫

分類
Linux

Install Fedora 35 on Dell Inspiron 1525

The Inspiron 1525 is Emanon's first (and only) laptop, which brought almost 13 years ago. When it got laggy and hard to run Adobe software, we brought an Acer desktop. Several years later, we got some video tasks to do, so we gave the Acer desktop to Emanon's sister, who didn't have a desktop. From that on, we started using a Dell desktop in daily life. But we only got one PC, we had to take turns recently. I found the old desktop after a room tidy up and thought maybe it can still run for easy tasks in daily life.

My Inspiron 1525 has a 2 GB Memory, a 2-core CPU, a 120 GB hard disk and a 15.4" screen(which is much bigger than my phone). Fortunately, it meets the minimum hardware of Fedora 35. I use Xfce desktop environment for many years, it's fast and has almost everything I need. So I download Fedora 35 Xfce Desktop and burn it into my old 2 GB flash disk with the official tool Fedora Media Writer.

sudo dnf install mediawriter
mediawriter

Then insert the flash disk into 1525, press power button. When you see the progress bar go to the end, keep hitting F12 then select USB Storage Device. You'll boot into Fedora 35 Xfce in a moment. If you haven't back up your files, you could do it now. If you don't have a wired Internet connection, you should download and copy the two files below for fixing the Wi-Fi later. Run the Install to Hard Drive in the desktop to install Fedora OS. For more details, please refer to Installing Using Anaconda. After that, reboot your laptop and remove the flash disk.

You'll see the Wi-Fi is failed, even after you updated all the software. The good news is there are ways to fix. Download broadcom-wl-6.30.163.46 (backup link), extract it. Run the following commands to get the working driver and copy them to your system.

#sudo yum install b43-fwcutter
sudo b43-fwcutter -w /lib/firmware broadcom-wl-6.30.163.46/broadcom-wl-6.30.163.46.wl_apsta.o
sudo sync
sudo /sbin/modprobe -r b43
sudo /sbin/modprobe b43

Now you can browse the web or do some text work on it. If you want some multimedia pleasure, you might need VLC. And before you install VLC, you need to enable RPM Fusion first.

sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm

本文更新於 2022/03/21。

分類
软件

Mozilla 的開源文字轉語音庫

Mozilla 的這款開源的文字轉語音 TTS(Text-to-Speech)引擎,是一個用於生成高級文本到語音的庫。它建立在最新的研究基礎上,旨在實現訓練的簡易性、速度和質量之間的最佳權衡。它帶有預訓練的模型和測量數據集質量的工具,已經在 20 多種語言的產品和研究項目中使用。

一些體驗:

  • 雖然我在 Python 3.9 下運行沒有任何問題,但是爲了少出問題,最好是用 3.6。
  • 安裝完所有依賴,虛擬環境的文件夾達到 3.1 GB,自帶的英文模型 107 MB,下載的中文模型 654 MB。
  • 我電腦沒有 GPU,生成一句話大概耗時 6 秒左右。
  • 項目自帶了一個 TTS 服務器,直接運行 tts-server 就可以在網頁上體驗 TTS。
  • TTS 有時候(尤其是中文)會抽風。(後來發現是文本沒有加句號導致的)

兩個示例:

The human voice is the most perfect instrument of all.

我們的祖國是花園

如果想要把語音轉換成文字可以使用Mozilla的開源語音轉文字庫DeepSpeech

本文更新於 2022/04/15。

分類
网站

當 CDN 失敗時回滾到自己的 js 資源

雖然 CDN 故障的概率非常微小,但是有些人爲的障礙卻可能導致用戶無法從 CDN 加載到資源。這時只要回滾到自己服務器上的資源就可以了,能用 CDN 的用戶優先才 CDN 加載,無法使用 CDN 的用戶從自己服務器加載。

<!DOCTYPE html>
<html>

<head>
  <!-- 在 head 裏調用 CDN 庫 -->
  <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
  <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
  <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
</head>
<body>
  <p>網頁正文</p>
  <!-- 在網頁底部檢查一個 CDN 庫裏變量 -->
  <script>
    if (!window.jQuery) {
      document.write('<script src="js/jquery-3.2.1.min.js"><\/script>');
      document.write('<script src="js/bootstrap.bundle.min.js"><\/script>');
      document.write('<link rel="stylesheet" href="css/bootstrap.min.css" \/>');
    }
  </script>
</body>
</html>