創用 CC 授權條款
除非另有註明,本網站的著作Fygul Hether製作,以創用CC 姓名標示-非商業性-禁止改作 4.0 國際 授權條款釋出。

2022年8月14日 星期日

讓使用Gnome keyring的軟體可在KDE上正常執行

概要

有些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中可直接正常執行而不用做任何調整,但可能還得等待不算短的時間,在此之前可暫時先做如上的調整,還好也還不算複雜。

參考與連結

  1. How do I get Gnome Keyring to work on KDE plasma
  2. Explain The Keyring Concept in Ubuntu: What is It and How to Use it?
  3. [Bug report]: Account creation becomes unresponsive at PIN verification (ArchLinux, KDE) #3847
  4. AUR : iota-firefly-wallet.git

沒有留言:

張貼留言