🐧

Crostini (Debian 12) でActivityWatchが起動しない (Wayland互換性問題)

に公開

はじめに

ChromeOS の Linux 環境 (Crostini) の Debian 12 (Bookworm) に、PCアクティビティトラッカーの「ActivityWatch」をインストールしようとしました。

公式ドキュメントに従い .deb パッケージをインストールしたのですが、Web UI ( http://localhost:5600 ) が真っ白な "Not Found" 画面になる、aw-qt コマンドが見つからないなど、多くの問題に直面しました。

この記事は、クリーンな Debian 12 環境で ActivityWatch を正しく動作させるまでの試行錯誤の過程と、最終的なインストール&設定マニュアルをまとめたものです。

環境

  • OS: ChromeOS (Crostini)
  • Linux環境: Debian 12 (Bookworm)
  • インストール対象: ActivityWatch (v0.13.2 時点)

結論から言うと

原因は、ActivityWatch (Qt6) と Debian 12 (Crostini) が標準で使う Wayland とのライブラリ互換性問題でした。

起動コマンドと自動起動設定に QT_QPA_PLATFORM=xcb という環境変数を指定し、強制的に X11 (Xcb) モードで動作させることで、この問題を回避します。

試行錯誤の過程(失敗の道のり)

問題解決に至るまでの「回り道」の記録です。

1. .deb でインストールしたが、サービスがない

sudo dpkg -i activitywatch-vX.XX.X.deb でインストール。
Linuxのサービスとして動くと思い込み、以下を実行。

$ systemctl --user status activitywatch
Unit activitywatch.service could not be found.

判明したこと: ActivityWatch の .deb パッケージは、systemd サービスを登録しません。

2. aw-qt が "command not found"

ドキュメントによると aw-qt というコマンドで起動するらしい。

$ aw-qt
command not found

判明したこと: 実行ファイルへのPATHが通っていません。

3. 実行ファイルの場所を特定

dpkg -L でパッケージがインストールしたファイル一覧を調査。

$ dpkg -L activitywatch | grep 'aw-qt'
/etc/xdg/autostart/aw-qt.desktop
/opt/activitywatch/aw-qt  <-- コレだ!
/opt/activitywatch/aw-qt.desktop
/usr/share/applications/aw-qt.desktop

判明したこと: 実行ファイルは /opt/activitywatch/aw-qt にありました。

4. Web UI が "Not Found"

フルパスで実行し、Web UIにアクセス。

$ /opt/activitywatch/aw-qt

ブラウザで http://localhost:5600 を開くと、真っ白な画面に "Not Found" と表示されます。これは中核機能である aw-server (Webサーバー) が起動していないことを意味します。

5. ターミナルログで根本原因を発見

aw-qt を実行したターミナルをよく見ると、起動直後にクラッシュしていました。

$ /opt/activitywatch/aw-qt
...
/opt/activitywatch/aw-qt: symbol lookup error: /opt/activitywatch/libQt6WaylandClient.so.6: undefined symbol: wl_proxy_marshal_flags
...

判明したこと: libQt6WaylandClient.so.6 というライブラリで symbol lookup error が発生しています。ActivityWatchに同梱されているQt6ライブラリと、Crostini (Debian 12) が使用するWaylandライブラリの間で互換性がないようです。

また、クラッシュしたにもかかわらず aw-server プロセスがゾンビ化してポート5600を掴んでしまい、Address already in use (ポート使用中) エラーが二次的に発生するケースもありました。


Crostini (Debian 12) でのActivityWatch設定マニュアル

クリーンな Crostini (Debian 12) 環境で ActivityWatch を設定する正しい手順です。

Step 1: ダウンロードとインストール

  1. ActivityWatch の GitHub リリースページ から、最新の .deb ファイル (例: activitywatch-vX.XX.X-linux-x86_64.deb) をダウンロードします。

  2. ターミナルを開き、ダウンロードしたファイルがあるディレクトリで dpkg を使ってインストールします。

    # 必要に応じてバージョン名を置き換えてください
    sudo dpkg -i activitywatch-v0.13.2-linux-x86_64.deb
    

Step 2: 既存プロセスの停止(クリーンアップ)

過去の起動失敗により、ゾンビプロセスがポートを掴んでいる可能性があるため、一度すべて停止させます。

pkill -f "aw-|activitywatch"

(何も表示されなくても問題ありません)

Step 3: Wayland互換性問題を回避してテスト起動

根本原因であるWaylandとの互換性問題を回避するため、環境変数 QT_QPA_PLATFORM=xcb を指定して、強制的に X11 (Xcb) モードで起動させます。

QT_QPA_PLATFORM=xcb /opt/activitywatch/aw-qt

このコマンドを実行すると、ターミナルにログが流れ、システムトレイにActivityWatchのアイコンが表示されます。(GNOME拡張機能がないとトレイアイコンは見えないかもしれませんが、プロセスは起動しています)

この状態で、Webブラウザで http://localhost:5600 にアクセスしてください。ダッシュボードが正しく表示されれば成功です。
(確認できたら、ターミナルで Ctrl + C を押してテスト実行を終了します)

Step 4: 自動起動設定の修正(最重要)

このままでは、PC(Crostini)を再起動すると、また xcb 無しのコマンドで起動しようとして失敗します。

ログイン時に自動で実行される設定ファイルにも、この「おまじない」を追記します。

  1. ユーザー用の自動起動ディレクトリを作成

    mkdir -p ~/.config/autostart
    
  2. システム標準の設定ファイルをコピー
    .deb が配置した /etc/ にある設定ファイルを、~/.config/(ユーザー設定)にコピーします。こちらが優先されます。

    cp /etc/xdg/autostart/aw-qt.desktop ~/.config/autostart/
    
  3. コピーした設定ファイルを編集
    nanovim などで、今コピーしたファイルを開きます。

    nano ~/.config/autostart/aw-qt.desktop
    
  4. Exec= の行を修正
    ファイルの中に Exec=/opt/activitywatch/aw-qt という行があります。
    この行を以下のように変更します。

    【修正前】
    Exec=/opt/activitywatch/aw-qt

    【修正後】
    Exec=env QT_QPA_PLATFORM=xcb /opt/activitywatch/aw-qt

    .desktop ファイル内で環境変数を設定するには、先頭に env コマンドを付けるのが標準的な作法です。

  5. ファイルを保存してエディタを終了します。(nano の場合は Ctrl+O, Enter, Ctrl+X

Step 5: 再起動して確認

これで全ての作業は完了です。

一度 Crostini (Linux) からログアウトして再ログインするか、Crostiniコンテナ自体を再起動してください。
ログイン後、自動的に aw-qtxcb モードで起動し、http://localhost:5600 にアクセスできるはずです。


補足:トレイアイコンの変更は可能か?

起動に成功した後、aw-qt が表示するトレイアイコン(システムトレイのアイコン)を任意の画像に変更しようと試みました。

調査1:標準アイコンディレクトリの確認

Linuxの標準的な作法では、アイコンは /usr/share/icons/ などに配置されます。

# .png や .svg ファイルが /icons/ や /pixmaps/ にないか検索
$ dpkg -L activitywatch | grep -E '/icons/|/pixmaps/' | grep -E '\.png$|\.svg$'
# (結果:何も表示されず)

判明: 標準ディレクトリにはアイコンをインストールしていないようです。

調査2:インストール先の確認

aw-qt 本体がある /opt/activitywatch/ ディレクトリ内に画像ファイルがないか確認しました。

$ dpkg -L activitywatch | grep '/opt/activitywatch/' | grep -E '\.png$|\.svg$'
/opt/activitywatch/aw-server/aw_server/static/logo.png
/opt/activitywatch/aw-server/aw_server/static/logo.svg
... (他、Web用のfaviconやロゴ画像がいくつか)

判明: Webダッシュボード(localhost:5600)で使うロゴやファビコンは見つかりましたが、aw-qt がトレイ表示に使用する専用のアイコンファイル(例: tray-icon.png)は見つかりませんでした。

結論:変更は(簡単には)不可能

調査の結果、トレイアイコンは独立した画像ファイルとして配置されているのではなく、aw-qt の実行ファイル自体にリソースとして埋め込まれている可能性が非常に高いです。

Qt (ActivityWatchが使うUIフレームワーク) では、このように画像をバイナリに直接埋め込むことが一般的です。

このアイコンを変更するには、ActivityWatchのソースコードをダウンロードし、アイコンファイルを差し替えた上で、Qt開発環境で aw-qt を再コンパイル(ビルド)する必要があります。これは簡単な設定変更ではなく、ソフトウェア開発の領域になります。

Discussion