Qt6を最新化したらquickshellが起動しなくなりました。quickshellとQt6の整合性が崩れたことが原因なのでQt6の更新と連動してquickshellをリビルドするようにしてみました。

環境

  • Arch Linux
    • qt6
    • quickshell

事象

Qt6が更新されるとquickshellが起動しなくなる。

> qs
qs: symbol lookup error: qs: undefined symbol: _ZN23QUntypedPropertyBindingC1EP23QPropertyBindingPrivate, version Qt_6_PRIVATE_API

Incompatibility with new Qt version
https://github.com/quickshell-mirror/quickshell/issues/208

対策

元々、quickshellには標準フック(/usr/share/libalpm/hooks/quickshell-check.hook)が存在しています。

/usr/share/libalpm/hooks/quickshell-check.hook
[Trigger]
Operation = Upgrade
Operation = Install
Type = Package
Target = qt6-base
Target = qt6-wayland
[Action]
Description = Querying Quickshell compatibility after Qt6 update...
When = PostTransaction
Exec = /usr/bin/quickshell --private-check-compat

システムのアップデートの際に標準フックは起動するものの、その中で/usr/bin/quickshellが起動できない状態でエラーになっていました。

(19/24) Querying Quickshell compatibility after Qt6 update...
/usr/bin/quickshell: symbol lookup error: /usr/bin/quickshell: undefined symbol: _ZN23QUntypedPropertyBindingC1EP23QPropertyBindingPrivate, version Qt_6_PRIVATE_API
エラー: コマンドの実行に失敗しました

暫定的に標準のフックを無効化し、代替のフックでquickshellをリビルドするようにします。

設定手順

  1. quickshellの標準フックと同じファイル名で自動リビルド用フックの作成
    /etc/pacman.d/hooks/quickshell-check.hook
    [Trigger]
    Operation = Upgrade
    Type = Package
    Target = qt6-base

    [Action]
    Description = Rebuilding quickshell-git after Qt6 update...
    When = PostTransaction
    Exec = /usr/bin/sudo -u [ユーザー名] /usr/bin/paru -S quickshell-git --rebuild --noconfirm
    • 標準フックは/usr/share/libalpm/hooks/にファイル名quickshell-check.hookで配置される。
    • 標準フックのファイル名と同じファイル名のファイルが/etc/pacman.d/hooks/に存在すると標準フックは実行されない。
    • 配置したファイルに代替のフック処理を実装する。
    • ユーザ名の部分は書き換える。

確認

  • qt6-baseのインストール
    paru -S qt6-base
    上記を実行するとquickshell-gitパッケージのリビルドが実行されました。