概要
有些Linux版的軟體像Minecraft, Skype會使用到Gnome keyring,在KDE環境中無法正常執行,主要原因是KDE預設不是使用Gnome keyring而是KWallet。[1]
本文記錄與此有關的問題與解決方式,先從Keyring說起,再以Firefly為例子做說明,使其在KDE中可正常執行。作業系統為Kubuntu 22.04。
Ubuntu的Keyring
何謂Keyring
Keyring是Linux上的一項安全功能,用來在桌面環境儲存密碼或是金鑰。就像實體的Keyring鑰匙圈,可以把多支鑰匙串掛在一個金屬環上,方便攜帶與保管。
Linux桌面環境用的Keyring則是可保存ssh的金鑰、GPG金鑰,或是其他應用像Google Chrome瀏覽器使用此功能時所用的金鑰,另外也可以保存額外的密碼。
Keyring會由一個主要密碼加密,這主要密碼預設是與用戶登入的密碼一樣,在用戶登入桌面環境,輸入密碼時就會同時解鎖打開Keyring,之後在第一次開啟使用到Keyring的軟體如Google Chrome時就不會再詢問一次密碼以解鎖Keyring。
然而,若把系統設置成自動登入桌面環境時,因為用戶未輸入密碼就沒能解鎖Keyring,開啟Google Chrome時就會出現詢問解鎖keyring密碼的對話窗,此時若不輸入密碼,按幾次取消還是可以使用Google Chrome,但原本存在其中的網站帳密會被清除。這樣的作法可以保護自動登入的系統,若不是由原用戶開機時,不致於讓他人開啟Google Chrome並使用了原用戶的網站帳密。
※若為圖方便而把Keyring密碼清空,以避免在啟動Google Chrome再輸入一次密碼,是非常不安全的做法。
Gnome與KDE的Keyring程式
Gnome桌面的keyring功能由gnome-keyring提供,前端GUI是Passwords and Keys,舊稱為Seahorse;而KDE則是KWallet,前端是KDE錢包管理員。
KDE一般預設並不會安裝gnome-keyring,故若是有應用程式在KDE中非得要使用gnome-keyring不可,就會無法正常執行,在此種情況,可以在KDE中安裝gnome-keyring與seahorse,如下:
$ sudo apt install gnome-keyring seahorse
記得檢查一下 gnome-keyring-daemon
是否已執行,這工作可用System Monitor查看,或 ps -aux | grep gnome-keyring-daemon
。
讓Firefly Desktop在KDE上正常執行
之前在Ubuntu MATE 20.04上正常使用Firefly Desktop,換到Kubuntu 22.04後,把原有的設置檔帶過來用,在輸入 PIN 碼時無反應;若是新設置,有用戶反映在建立新帳號輸入PIN碼時無反應[3]。其主要問題即是使用Gnome keyring,在KDE若想正常執行,必須如上述般先安裝好所需要的東西。
另外一個問題則是,由於Firefly官方釋出的Linux版本是個AppImage執行檔,在此情況下建議將其解開後安裝使用,避免用 AppImage 的 --no-sandbox
執行參數。
※2022-10-4補充:新版Firefly的AppImage執行檔已改成預設採用 --no-sandbox
執行參數,也不必再像以下一般解開後執行。
參考了Arch User Repository打包Firefly的方式[4],到官方下載點下載AppImage檔,以1.6.5版為例,解開後做些調整,安裝到系統中使用。可在家目錄中建立個 build
資料夾做這些工作,完成後可將此資料夾清除。主要工作的指令如下,可將存成 .sh
腳本,方便往後重複執行:
#!/usr/bin/bash
# Assign filename before executing this script
APPIMAGE=firefly-desktop-1.6.5.AppImage
APP=firefly-desktop
EXEC=/usr/bin/iota-firefly-wallet
# Extract Appimage
chmod +x ./$APPIMAGE
./$APPIMAGE --appimage-extract > /dev/null 2>&1
chmod -x ./$APPIMAGE
# fix file permissions - all files as 644 - directories as 755
find ./squashfs-root/ -type d -exec chmod 755 {} \;
find ./squashfs-root/ -type f -exec chmod 644 {} \;
# Copy files
sudo mkdir -p /opt/$APP
sudo cp -R ./squashfs-root/* /opt/$APP
sudo chmod +x /opt/$APP/desktop
# Desktop entry
# 先調整內容
sudo sed -i "s|AppRun|$EXEC|" ./squashfs-root/desktop.desktop
sudo sed -i "s|Icon=desktop|Icon=/usr/share/icons/$APP.png|" ./squashfs-root/desktop.desktop
sudo cp ./squashfs-root/desktop.desktop /usr/share/applications/$APP.desktop
# Icon
sudo cp -R ./squashfs-root/usr/share/icons/hicolor/0x0/apps/desktop.png /usr/share/icons/$APP.png
# Link binary
sudo ln -s /opt/$APP/desktop $EXEC
往後若要升級版本,記得修改好 APPIMAGE
的檔名後存檔,再執行一次腳本。
若要將其移除:
#!/usr/bin/bash
APP=firefly-desktop
EXEC=/usr/bin/iota-firefly-wallet
# Remove files
sudo rm -R /opt/$APP
# Remove Desktop entry
sudo rm /usr/share/applications/$APP.desktop
# Icon
sudo rm /usr/share/icons/$APP.png
# Link
sudo rm $EXEC
正常的話,執行此軟體在設定或輸入 PIN 碼時,若尚未解鎖keyring就會出現要求解鎖的對話窗,成功解鎖後即可繼續使用。
結語
以上是用來讓使用Gnome Keyring的軟體能在KDE上執行的方法,但要注意的是,此法並非可適用於這類的所有狀況,如果軟體使用了某個KDE未提供的功能,還是可能無法正常執行的。
未來Firefly也許在KDE中可直接正常執行而不用做任何調整,但可能還得等待不算短的時間,在此之前可暫時先做如上的調整,還好也還不算複雜。
沒有留言:
張貼留言