「Qt と GTK アプリケーションの外観の統合」の版間の差分
Kusanaginoturugi (トーク | 投稿記録) (→Qt アプリで GTK+ のアイコンテーマを使う: 英語版に差し替え) |
Kusanaginoturugi (トーク | 投稿記録) (→ヒントとテクニック: delele old secion. add new section.) |
||
103行目: | 103行目: | ||
}} |
}} |
||
+ | === Add Title bar and frame to GTK3 applications under KDE Plasma === |
||
− | === GTK+ アプリケーションで KDE ファイルダイアログ === |
||
+ | To have Gnome/GTK applications display with a KDE/Plasma title bar and frame, install {{AUR|gtk3-nocsd-git}} and restart your window manager to load the updated library path. |
||
− | [http://kde-apps.org/content/show.php?content=36077 KGtk] は LD_PRELOAD を使って GTK+ 2.x のアプリで KDE のファイルダイアログ (開く、保存など) を強制するラッパースクリプトです。KDE を使用していてそのファイルダイアログが GTK+ よりも好ましいときは [[Arch User Repository|AUR]] から {{AUR|kgtk}} をインストールできます。インストールした後、2つの方法で {{ic|kgtk-wrapper}} を使って GTK+ 2.x アプリケーションを実行することが可能です (例として [[GIMP]] を使います): |
||
− | * {{ic|kgtk-wrapper}} を直接呼び出し、引数として GTK+ 2.x バイナリを指定する: |
||
− | :{{bc|$ /usr/bin/kgtk-wrapper gimp}} |
||
− | * {{ic|/usr/share/applications/}} にある KDE の .desktop ショートカットを修正して {{ic|Exec}} に kgtk-wrapper を前に付ける。 |
||
− | :例えば [[GIMP]] なら、{{ic|/usr/share/applications/gimp.desktop}} ショートカットファイルを編集して {{ic|1=Exec=gimp-2.8 %U}} を {{ic|1=Exec=kgtk-wrapper gimp-2.8 %U}} に置き換えて下さい。 |
||
− | {{Note|GTK+ アプリケーションには KGtk ラッパーと互換性がないものがあります (例: [[Chromium]])。場合によってはラッパーによってアプリケーションがクラッシュします (例: [[Firefox]])。さらに [[KDM]] など他のアプリケーションに影響を与えることもあります ([[Thunderbird]] などと一緒に使っている場合)。}} |
||
+ | You can also run Gtk application with the wrapper: |
||
− | === 指定のテーマでアプリケーションを起動する === |
||
+ | $ gtk3-nocsd gedit |
||
+ | === Improve subpixel rendering of GTK apps under KDE Plasma === |
||
− | カスタムスタイルを特定の GTK+ 2.x アプリケーションで使用することができます。アプリケーションを指定したテーマで起動するには: |
||
− | GTK2_RC_FILES=/usr/share/themes/QtCurve/gtk-2.0/gtkrc firefox |
||
+ | See [[Font configuration#LCD filter]]. |
||
− | このコマンドでは QtCurve テーマで Firefox が起動します。 |
||
+ | === Consistent file dialog === |
||
+ | In order to have the same file dialog, one can use XDG Portals. |
||
− | === KDE における GTK アプリのサブピクセルレンダリングの改善 === |
||
+ | [[Install]] {{Pkg|xdg-desktop-portal}} and {{Pkg|xdg-desktop-portal-kde}} and set {{ic|1=GTK_USE_PORTAL=1}} [[environment variable]] in /etc/environment. |
||
− | GTK アプリのサブピクセルレンダリングがネイティブの KDE Qt アプリケーションよりもはっきりとしない場合、以下の行を {{ic|$XDG_CONFIG_HOME/fontconfig/fonts.conf}} に追加してみて下さい ({{ic|<fontconfig>}} タグの間): |
||
+ | Note that currently not all gtk applications support kde file dialogs correctly. For example, [[Thunderbird]] supports it normally. |
||
− | {{bc|<nowiki> |
||
− | <match target="font"> |
||
− | <edit mode="assign" name="lcdfilter"> |
||
− | <const>lcddefault</const> |
||
− | </edit> |
||
− | </match> |
||
− | </nowiki>}} |
||
+ | Applications using electron should use at least electron 14 (see [https://github.com/electron/electron/pull/19159 #19159]) and properly implement this function.<br> |
||
− | 詳しくは[[フォント設定#LCD フィルター]]を参照。 |
||
+ | vscode has a pull request for fixing a problem, see [https://github.com/microsoft/vscode/pull/126113 #126113]. |
||
+ | |||
+ | Meld application from official repository version 3.20.3-1 still opens gtk file picker; version 3.21.1 from {{AUR|meld-git}} opens kde file picker, but fails to open directories, see [https://gitlab.gnome.org/GNOME/meld/-/issues/525 bug report] for more info. |
||
+ | |||
+ | GIMP has not implemented use of the portal yet, see [https://gitlab.gnome.org/GNOME/gimp/-/issues/1830 bug report]. |
||
+ | |||
+ | {{Note| There are still lots of gtk applications that do not implement portal properly (abandoned applications, or authors are focused on other tasks). To simplify file picking from such applications, you can at least synchronize bookmarks from dolphin to nautilus. Use this command: |
||
+ | {{bc|1=awk -F\" '/<bookmark href=\"file/ {print $2}' < $HOME/.local/share/user-places.xbel > $HOME/.config/gtk-3.0/bookmarks}} |
||
+ | Alternatively, use {{AUR|bookmarksync-git}} for that purpose. There you can manually edit and sync bookmarks to both sides. |
||
+ | }} |
||
== トラブルシューティング == |
== トラブルシューティング == |
2022年2月16日 (水) 11:19時点における版
Qt と GTK+ ベースのプログラムは異なるウィジェットツールキットを使ってグラフィカルユーザーインターフェースを表示しています。それぞれにデフォルトで異なるテーマ・スタイル・アイコンセットが存在するため、"ルックアンドフィール"は著しく乖離してしまいます。この記事ではデスクトップエクスペリエンスを統合するために Qt と GTK+ のアプリケーションの外観を似たようにする方法を説明しています。
概要
2つのツールキットで同じような見た目を表示するには以下を修正する必要が出てきます:
- テーマ: アプリケーションやウィジェットセットなどの外観のカスタマイズ。テーマは通常、スタイル・アイコンテーマ・カラーテーマから成ります。
- スタイル: ウィジェットセットのグラフィカルレイアウトと外観。
- アイコンテーマ: グローバルアイコンのセット。
- カーソルテーマ: スタイルと合わせて使われるグローバルカラーのセット。
外観の統一のために取れる方法は様々です:
- 特殊なテーマエンジンを使って、他のグラフィカルツールキットの見た目をメインのツールキットに合うように仲介させる。
- 下で説明しているツールを使って GTK+ と Qt のスタイルを別個に修正し、同じような見た目のテーマ (スタイル・カラー・アイコン・カーソル・フォント) を選択する。
テーマエンジン
テーマエンジンは複数のツールキット間でテーマ (アイコンは除く) を翻訳する薄いレイヤー API として考えることができます。これらのエンジンはプロセスに余分なコードを追加するため、この種の解決方法がネイティブのスタイルを使うのと比べ最適なのかどうかは議論の余地があります。
QGtkStyle
この Qt スタイルは GTK+ 2 を使って全てのコンポーネントを表示することで GNOME などの GTK+ ベースの環境とブレンドします。Qt 4.5 から、このスタイルは Qt に含まれているようになっています。gtk2 をインストール・設定してください。
QGtkStyle は Cinnamon, GNOME, Xfce におけるデフォルトの Qt4 スタイルです。また Cinnamon, GNOME, MATE, LXDE, Xfce におけるデフォルトの Qt5 スタイルでもあります。他の環境では:
- Qt4 の場合、Qt Configuration (
qtconfig-qt4
) で有効にすることができます。Appearance > GUI Style から GTK+ を選択してください。もしくは、/etc/xdg/Trolltech.conf
(システム全体) あるいは~/.config/Trolltech.conf
(ユーザー個別) ファイルを編集してください:
~/.config/Trolltech.conf
... [Qt] style=GTK+ ...
- Qt 5 の場合、qt5-stylepluginsAUR をインストールし、次の環境変数を設定することで有効にできます:
QT_QPA_PLATFORMTHEME='gtk2'
。
完全な統合をするには、GTK+ 2 と GTK+ 3 の両方をサポートしている GTK+ テーマを設定する必要があります。上の設定を有効にすると描画に不具合が生じる場合、GTK+ テーマを変更してください。
QGnomePlatform
この Qt 5 プラットフォームテーマでは、GNOME での外観の設定が Qt アプリケーションに適用されます。qgnomeplatformAUR か qgnomeplatform-gitAUR をインストールした上で、別途スタイルをQt と GTK アプリケーションの外観の統合#Qt と GTK+ 両方のためのスタイルを参考にインストールしてください。
GNOME 3.20 以降では自動的に有効化されます。それ以前では QT_QPA_PLATFORMTHEME=gnome
と設定すると有効になります。
Kvantum
Kvantum kvantum-qt5 は SVG ベースの Qt5 テーマです。Adapta, Arc, Ambiance, Materia GTK テーマと同様の Qt テーマが含まれています。
Qt と GTK+ 両方のためのスタイル
統合のために、Qt と GTK+ 両方で提供されているウィジェットスタイルのセットが存在し、全ての主要なバージョンが含まれています。このようなスタイルを使うことで、アプリケーションが使っているツールキットに関係なく全てのアプリケーションの見た目を一つにすることが可能です。
Breeze
Breeze は Plasma 5 のデフォルトの Qt スタイルです。Qt5 のスタイルは breeze パッケージで、Qt4 のスタイルは breeze-kde4AUR パッケージでインストールできます。Breeze と似ている GTK+ 2 と GTK+ 3 のテーマは breeze-gtk パッケージでインストールできます。
パッケージをインストールしたら、GTK+ の設定ツールを使って GTK+ のテーマを変更してください。
KDE Plasma を利用している場合は、KDE システム設定の System Settings > Application Style > Configure GNOME/GTK Application Style… にて GTK の設定が反映されるようにしてください。 もしくは、kde-gtk-config をインストールしてコマンドラインから実行して設定することもできます。
Adwaita
Adwaita はデフォルトの GNOME のテーマです。GTK+ 3 のテーマは標準で含まれており、GTK+ 2 のテーマは gnome-themes-extra に含まれています。デフォルトでは、Qt アプリケーションには GTK+ 2 のテーマが使われます (#QGtkStyle を使用)。
ネイティブの Qt テーマを GTK+ 3 の Adwaita のようにしたいときは adwaita-qt を見て下さい。Qt 5 バージョンは adwaitaAUR[リンク切れ: パッケージが存在しません] パッケージで、Qt 4 バージョンは adwaita-qt4AUR パッケージでインストールできます。
デフォルトに設定するときは、Qt 5 では qt5ct パッケージか、QT_STYLE_OVERRIDE=adwaita
環境変数を使います。
Qt 4 では (qt4AUR パッケージに含まれている) qtconfig-qt4
を使います。
ヒントとテクニック
Qt アプリで GTK+ のアイコンテーマを使う
If you are running Plasma, run kde-gtk-config and select the icon-theme under System Settings > Application Style > GTK.
If you are using GNOME, run dconf-editor and change the icon-theme
key under org > gnome > desktop > interface to your preferred icon theme.
If you are not using a Desktop environment, for example if you are running a minimal system with i3-wm, install dconf-editor and set the icon-theme as explained above.
You might also have to set the value of DESKTOP_SESSION
in your profile. See Environment variables#Defining variables for the possible ways to obtain the desired result.
Add Title bar and frame to GTK3 applications under KDE Plasma
To have Gnome/GTK applications display with a KDE/Plasma title bar and frame, install gtk3-nocsd-gitAUR and restart your window manager to load the updated library path.
You can also run Gtk application with the wrapper:
$ gtk3-nocsd gedit
Improve subpixel rendering of GTK apps under KDE Plasma
See Font configuration#LCD filter.
Consistent file dialog
In order to have the same file dialog, one can use XDG Portals.
Install xdg-desktop-portal and xdg-desktop-portal-kde and set GTK_USE_PORTAL=1
environment variable in /etc/environment.
Note that currently not all gtk applications support kde file dialogs correctly. For example, Thunderbird supports it normally.
Applications using electron should use at least electron 14 (see #19159) and properly implement this function.
vscode has a pull request for fixing a problem, see #126113.
Meld application from official repository version 3.20.3-1 still opens gtk file picker; version 3.21.1 from meld-gitAUR opens kde file picker, but fails to open directories, see bug report for more info.
GIMP has not implemented use of the portal yet, see bug report.
トラブルシューティング
Qt アプリケーションが QGtkStyle を使わない
GTK+ が GTK+-Qt エンジンを使っている場合、Qt は QGtkStyle を正しく適用しません。環境変数 GTK2_RC_FILES
に記載された GTK+ 設定ファイルを読み込むことで Qt は GTK+-Qt エンジンが使われるかどうか判定します。環境変数が正しく設定されていないときは、Qt はエンジンを使っているとして仮定し、GTK+ スタイルの Clearlooks を使うように QGtkStyle を設定し、エラーメッセージを出力します:
QGtkStyle cannot be used together with the GTK_Qt engine.
他にも、シェルから qtconfig-qt4
を起動して GTK+ スタイルを選択するとエラーが表示されることがあります:
QGtkStyle was unable to detect the current GTK+ theme.
このスレッドによれば、この問題を解決するには libgnomeuiAUR をインストールする必要があります。xfce と同じように、これにはグラフィカルツールでテーマを変更する度にファイルを編集する必要がないという利点もあります。
Openbox や GNOME 以外の環境を使っているユーザーもこの問題に出くわす可能性があります。問題を解決するには、まず .xinitrc
ファイルに以下を追加してください:
.xinitrc
... export GTK2_RC_FILES="$HOME/.gtkrc-2.0" ...
それから特定のアプリケーションを使うか手動で ~/.gtkrc-2.0
を編集して使いたいテーマを指定してください、以下を追加します:
.gtkrc-2.0
... gtk-theme-name="[name of theme]" ...
ツールによっては ~/.gtkrc-2.0
に以下のような include ディレクティブしか挿入しないことがあります:
.gtkrc-2.0
... include "/usr/share/themes/SomeTheme/gtk-2.0/gtkrc" ...
これでは QGtkStyle の全てのバージョンで認識されません。この問題は ~/.gtkrc-2.0
ファイルに上の例のように gtk-theme-name
を手動で挿入することで解決できます。
以上の手順が上手く行かないときは、gconfAUR をインストールして次のコマンドを実行してください:
gconftool-2 --set --type string /desktop/gnome/interface/gtk_theme [name of theme]
さらに、同じアイコンやカーソルを設定したい場合、それらも指定してください。
gconftool-2 --set --type string /desktop/gnome/interface/icon_theme Faenza-Dark
上のコマンドはアイコンテーマを /usr/share/icons/Faenza-Dark
にある Faenza-Dark に設定します。カーソルテーマを設定するには最初に gconf の値を設定してください。
gconftool-2 --set --type string /desktop/gnome/peripherals/mouse/cursor_theme Adwaita
それから以下の内容で /usr/share/icons/default/index.theme
ファイルを作成してください:
[Icon Theme] Inherits=Adwaita
GTK+ アプリでテーマが使えない
設定したスタイルやテーマエンジンが GTK アプリケーションで表示されない場合は、おそらく GTK+ の設定ファイルが何らかの理由でロードされていません。次を実行することでシステムが設定ファイルをどこにあると期待しているか確認できます:
$ export | grep gtk
通常は期待されるファイルは GTK1 は ~/.gtkrc
、GTK+ 2.x は ~/.gtkrc2.0
または ~/.gtkrc2.0-kde
です。
システムをアップグレードすると SVG (Breeze) アイコンが GTK+ アプリで使用されない
次のコマンドを実行して、gdk-pixbuf のキャッシュ情報を更新してみてください [3]:
# gdk-pixbuf-query-loaders --update-cache