HiDPI

提供: ArchWiki
2022年10月25日 (火) 11:40時点におけるKusanaginoturugi (トーク | 投稿記録)による版 (序文を修正(英語版準拠))
ナビゲーションに移動 検索に移動

関連記事

HiDPI (High Dots Per Inch) ディスプレイとは、比較的小さい型で高解像度を誇るディスプレイのことで、Apple の "Retina Display" の名称でも知られています。Apple の製品やハイエンドの "ultrabook" でよく使われています。

今のところ全てのソフトウェアが高解像度モードで上手く動作するわけではありません。以下では HiDPI の画面での作業を快適する一般的な設定を記載しています。

デスクトップ環境

GNOME

HiDPI を有効にするには、Settings > Devices > Displays から有効にするか、gsettings を使ってインターフェイスのスケールファクタを設定します:

$ gsettings set org.gnome.settings-daemon.plugins.xsettings overrides "[{'Gdk/WindowScalingFactor', <2>}]"
$ gsettings set org.gnome.desktop.interface scaling-factor 2

設定をリセットしたいときは scaling-factor1 に設定してください。

ノート: GNOME では、整数のスケーリング数値しか設定できません。1 = 100%、2 = 200% などです。以下の 小数値のスケーリング を参照してください。

小数値のスケーリング

scaling-factor でできることは 2, 3, etc の設定だけですが、特定の HiDPI ディスプレイや小さなスクリーン (小さなタブレットなど) には理想的ではないかもしれません。Wayland と Xorg の両方で分数スケーリングは可能ですが、そのプロセスは異なります。

Wayland

実験機能の小数値スケーリングを有効化:

$ gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer']"

Settings > Devices > Displays から小数で設定できるようになります。

Xorg

scaling-factorxrandr を組み合わせることで整数以外のスケールファクタが使えます。xrandr だけを使用したときのように TTF フォントが汚くなることはありません。

まずは GNOME をスケールさせます。2で小さすぎる場合は3以上を使ってください。

$ gsettings set org.gnome.desktop.interface scaling-factor 2

それから xrandr でズームアウトファクタを設定して小さくスケールします。まずは出力の名前を確認:

$ xrandr | grep -w connected | cut -d' ' -f1
eDP1

以下、確認できた値を --output で指定するようにしてください。ディスプレイが複数ある場合はそれぞれで個々にスケールを設定できます。

1.2倍に拡大するには、以下のコマンドを実行:

$ xrandr --output eDP1 --scale 1.2x1.2

UI が大きすぎる場合、スケールを増やします:

$ xrandr --output eDP1 --scale 1.25x1.25

UI が小さすぎる場合、スケールを減らしてください。一番良い値を見つけるまで繰り返し実行してください。

最後に、マウスがスクリーンを正しく使えるように設定する必要があります。スケール後の解像度を取得してください:

$ xrandr | grep eDP1
eDP1 connected primary 2304x1296+0+0 (normal left inverted right x axis y axis) 239mm x 134mm

確認できた値を使って以下のコマンドを実行:

$ xrandr --output eDP1 --panning 2304x1296

テキストスケーリング

また、表示倍率を変更するだけでなく、テキストを個別に倍率変更することも可能です。これは Gnome Tweaks の Fonts > Scaling Factor に移動するか、gsettings を使うことで行えます。テキストのスケーリングファクターは整数である必要はないことに注意してください。

$ gsettings set org.gnome.desktop.interface text-scaling-factor 1.5
Xorg 上での GTK+ と Gnome Shell の要素の比較

上記のようにテキストのスケーリングを調整することは、GNOME デスクトップの GTK+ 要素にのみ影響します。これで Wayland 上のすべてをカバーできるはずです。なぜなら、GNOME Shell UI (トップバー、ドック、アプリケーション・メニューなどを含む) は別途 St[リンク切れ 2021-11-11] ツールキットに依存しているためです。これは長年の問題で、Gnome Shell 3.35 以降では パッチ がマージされ、利用可能になっていることに注意してください。古いリリースでは、Xorg ユーザーは現在使用しているシェルテーマを手動で編集することで、Gnome シェルのスケーリング問題のほとんどを解決することができます。関連する CSS ファイルは通常 /usr/share/themes/YOUR-THEME/gnome-shell/gnome-shell.css に配置されています。ユーザーは、このファイル内のすべての "font-size" 要素を、ディスプレイのスケーリングに比例して大きくする必要があります(200%のスケーリングにはフォントサイズを2倍にするなど)たとえば、Adapta シェルテーマ用に編集した CSS ファイルのトップは、以下のようになります。

usr/share/themes/Adapta/gnome-shell/gnome-shell.css
stage { font-size: 20pt; font-family: Roboto, Noto Sans, Sans-Serif; color: #263238; }

これらの変更が保存されたら、別のテーマに切り替えて(たとえば、gnome-tweaks を使用して)、再度元に戻してアクティブにします。これで、トップバー、アプリケーションメニュー、カレンダー、およびその他のシェル要素が正しくスケーリングされるはずです。

関連するシェルテーマの CSS ファイルを編集することに加えて、Xorg のユーザーは、開いているアプリケーションの上部にあるタイトルバーのフォントを増やしたい場合もあります。これは、dconf エディター (org > gnome > desktop > wm > preferences :: titlebar-font)を介して実行できます。 title-bar-uses-system-fonts オプションもオフにする必要があることに注意してください。または、gsettings を使用します:

$ gsettings set org.gnome.desktop.wm.preferences titlebar-font 'Cantarell Bold 22' ## Change as needed
$ gsettings set org.gnome.desktop.wm.preferences titlebar-uses-system-font false

KDE Plasma

KDE の設定を使ってフォント・アイコン・ウィジェットのスケーリングを調整できます。Qt と GTK+ 両方のアプリケーションに適用されます。

フォント・ウィジェット・アイコン全てのスケーリングを変更するには:

  1. システム設定 → ディスプレイとモニター → ディスプレイの設定 → ディスプレイのスケール
  2. スライダーをドラッグして適当なサイズを設定してください。
  3. 再起動することで変更が適用されます。

フォントのスケーリングだけ変更するには:

  1. システム設定 → フォント
  2. "Force fonts DPI" にチェックを入れて DPI レベルを適当な値に設定してください。新しく起動したアプリケーションから即座に変更が適用されます。Plasma デスクトップに変更を適用するには一度ログアウトする必要があります。

アイコンのスケーリングだけ変更するには:

  1. System Settings → Icons → Advanced
  2. カテゴリごとに適切なアイコンサイズを選択してください。変更はすぐに適用されます。

固定サイズのトレイアイコン

Plasma は Qt のスケーリング設定をデフォルトでは無視するため、トレイアイコンはスケールしません。Plasma に Qt の設定を反映させるには、PLASMA_USE_QT_SCALING 環境変数1 に設定してください。

Xfce

Xfce の設定マネージャ→外観→フォントから DPI のパラメータを変更してください。Retina スクリーンでは 180 または 192 がぴったりです。正確な数字を得たいときは、$ xdpyinfo | grep resolution を実行して得た数字を2倍してください。

システムトレイのアイコンを拡大するには、システムトレイを右クリック (アイコンをクリックしないように、空きスペースや上部・下部のピクセルを右クリックしてください) → “Properties” → “Maximum icon size” を 32, 48, 64 などに設定してください。

Cinnamon

Cinnamon は 2.2 から HiDPI をサポートしています。GTK3 をリビルドしなくても、十分なサポートが得られます (例: ウィンドウの縁のサイズが正しく設定されます。Xfce では行われません)。

Enlightenment

E18 の場合、E 設定パネルを開いて下さい。Look → Scaling から、UI のスケール比を設定できます。MBPr 15" のネイティブ解像度なら 1.2 が丁度です。

X サーバー

プログラムによっては物理的な横幅を使って DPI を検出します。例えば i3 (ソース) や Chromium (ソース) などが挙げられます。

X サーバーがモニターの物理的な寸法を正しく検出できているか確認するには、次を実行 (xdpyinfo ユーティリティは xorg-xdpyinfo パッケージに含まれています):

$ xdpyinfo | grep -B 2 resolution
screen #0:
  dimensions:    3200x1800 pixels (423x238 millimeters)
  resolution:    192x192 dots per inch

上の例では 96 dpi の倍数を使うために (この場合 192 dpi)、少しだけ誤っている面積 (Dell XPS 9530 は 346mm x 194mm なのに 423mm x 328mm になっている) を使っています。これは正確な DPI を使うよりも良い場合が多く、例えば i3 では Pango のフォントレンダリングがパリッとします。

xdpyinfo によって示された DPI が正しくない場合、修正方法は Xorg#画面サイズと DPI を見てください。

X Resources

X の設定をしてくれる GNOME, KDE, Xfce などのデスクトップ環境を使っていない場合、~/.Xresources で手動で Xft の DPI を設定できます:

~/.Xresources
Xft.dpi: 180
Xft.autohint: 0
Xft.lcdfilter:  lcddefault
Xft.hintstyle:  hintfull
Xft.hinting: 1
Xft.antialias: 1
Xft.rgba: rgb

~/.xinitrcxrdb -merge ~/.Xresources と記述するなどして X の起動時に設定が正しくロードされるようにしてください (詳しくは Xresources を参照)。

設定することでほとんどのツールキットやアプリケーションでフォントが正しく表示されるようになりますが、アイコンのサイズなどは変わりません。また、ツールキットのスケール (例: GDK_SCALE) と一緒に Xft.dpi を設定した場合、Firefox などのプログラムでインターフェイスの表示が大きくなりすぎることがあります。

GUI ツールキット

Qt 5

X サーバーで DPI の値を変えられない場合でも、Qt アプリケーションには HiDPI でちゃんと表示されるようにする方法があります。

Qt 5.6 から、Qt 5 アプリケーションは QT_AUTO_SCREEN_SCALE_FACTOR 環境変数によって設定された画面 DPI を使用するようになりました。例えば /etc/profile.d/qt-hidpi.sh ファイルを作成し、以下を記述して実行可能属性を付与します:

export QT_AUTO_SCREEN_SCALE_FACTOR=1

DPI の自動検知が上手くいかない場合、スケーリングをスクリーンごと (QT_SCREEN_SCALE_FACTORS)、あるいは全てのスクリーン (QT_SCALE_FACTOR) に手動で設定することができます。詳しくは Qt のブログ記事 を参照してください。

ノート: startkde スクリプトによって上記の変数は unset されるため、KDE では X サーバーで設定された DPI による解像度を優先します。

手動でスクリーンファクタを設定した場合、QT_AUTO_SCREEN_SCALE_FACTOR=0 を設定しないと明示的に高 DPI を有効にしている一部のアプリケーションも2倍にスケールされてしまいます。このため KDE ではスケールの手動設定を無効にしています。

  • QT_SCALE_FACTOR はフォントを拡大します。
  • QT_SCREEN_SCALE_FACTORS はフォントを拡大しません。

他のツールキットでも設定を適用するために xrdb でフォントの DPI を手動で設定していた場合、QT_SCALE_FACTORS はかなり巨大なフォントを表示するようになります。

GDK 3 (GTK+ 3)

GTK+ 3 アプリケーションで 2倍に UI エレメントを拡大するには:

$ export GDK_SCALE=2

テキストのスケーリングを戻すには:

$ export GDK_DPI_SCALE=0.5

GTK+ 2

ツールキットによる UI エレメントの拡大は不可能ですが、oomox-gitAUR を使用することで HiDPI ディスプレイ用にあらかじめ拡大されたエレメントを使用するテーマを生成できます。

Elementary (EFL)

UI のエレメントを1.5倍に拡大するには:

$ export ELM_SCALE=1.5

詳しくは https://phab.enlightenment.org/w/elementary/ を参照。

ブートマネージャ

GRUB

フレームバッファの解像度を低くする

GRUB/ヒントとテクニック#フレームバッファの解像度を設定するを見てください。

GRUB フォントのサイズを変更する

大きなサイズのフォントを使用する方法があります。ttf-dejavu パッケージに含まれている DejaVu Sans Mono フォントでサイズが 36 の GRUB フォントを生成:

# grub-mkfont --output=/boot/grub/fonts/DejaVuSansMono36.pf2 --size=36 /usr/share/fonts/TTF/DejaVuSansMono.ttf

/etc/default/grubGRUB_FONT 行を追加することで GRUB から生成したフォントを使用できます:

/etc/default/grub
GRUB_FONT=/boot/grub/fonts/DejaVuSansMono36.pf2

最後に GRUB の設定を更新してください:

# grub-mkconfig -o /boot/grub/grub.cfg

systemd-boot

​ 次の行を追加して bootctl update を実行すると、systemd-boot メニューのフォントサイズが大きくなります。 ​

/boot/loader/loader.conf
console-mode 1

アプリケーション

ブラウザ

Firefox

FirefoxGDK 3 (GTK+ 3) の設定を使用します。しかしながら GDK_SCALE では Firefox を完全にはスケールされず、小数値は使えません。代わりに GDK_DPI_SCALE を使用すると良いでしょう。

GTK の設定を上書きしたい場合、Firefox の高度な設定のページ (about:config) を開いて layout.css.devPixelsPerPx パラメータを 2 に設定してください (2 は Retina スクリーンに合った数値です、必要に応じて数値を変更してください)。メニューや URL バーのフォントが小さい場合は userChrome.css ファイルを作成することで明示的にフォントサイズを設定できます (userChrome.css について詳しくは mozillaZine を参照):

~/.mozilla/firefox/<profile>/chrome/userChrome.css
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");

/* #tabbrowser-tabs, #navigator-toolbox, menuitem, menu, ... */
* {
    font-size: 15px !important;
}

/* exception for badge on adblocker */
.toolbarbutton-badge {
    font-size: 8px !important;
}

Retina ディスプレイのような HiDPI ディスプレイを他のモニターと組み合わせて使っている場合、AutoHiDPI アドオンを使うことで有効なディスプレイに合わせて layout.css.devPixelsPerPx を自動的に調整できます。また、Firefox バージョン 49 から、ディレプレイの解像度にあわせて自動的にスケールするようになっています。

Chromium / Google Chrome

Chromium は GDK 3 (GTK+ 3) の設定を使用します。

上書きしたい場合、--force-device-scale-factor フラグを使ってスケール値を設定してください。全てのコンテンツと ui、さらにタブやフォントサイズがスケールします。例:

$ chromium --force-device-scale-factor=2

このオプションを使う場合、スケールファクター 1 が通常のスケーリングです。少数点を使うこともできます。

変更を永続化したい場合、~/.config/chromium-flags.conf にフラグを追加してください (Chromium の場合):

~/.config/chromium-flags.conf
--force-device-scale-factor=2

Retina ディスプレイのような HiDPI モニターと別のモニターを一緒に使用する場合、reszoom 拡張を使うことで使用しているディスプレイにあわせてズームレベルを自動的に調整することができます。

Opera

Opera は GDK 3 (GTK+ 3) の設定を使用します。

上書きしたい場合、バージョン24から、--alt-high-dpi-setting=X コマンドラインオプションを使って Opera を起動することで DPI を変更することができます。X は希望の DPI に置き換えて下さい。例えば、--alt-high-dpi-setting=144 なら Opera は DPI が144だと認識します。新しいバージョンの opera ではフォントの DPI 設定を使って DPI を自動で検出します (KDE の場合: force font DPI の設定)。

メールクライアント

Thunderbird

Firefox を見てください。about:config にアクセスするには、Edit → Preferences → Advanced → Config editor を開きます。

Wine アプリケーション

次を実行して、"画面"タブの"画面の解像度"設定を変更してください:

$ winecfg

フォントのサイズにだけ影響を与えます。

Skype

Skype for Linux (skypeforlinux-stable-binAUR) は GTK+ 3 を使用しています。

Spotify

Spotify はスケーリングファクタを指定して起動することができます。例:

$ spotify --force-device-scale-factor=1.5

Spotify の .desktop ファイルを上書きすることもできます。ファイルをコピーしてください:

$ cp /usr/share/applications/spotify.desktop ~/.local/share/applications/

それからファイルを編集して --force-device-scale-factor オプションを追加してください:

[Desktop Entry]
Name=Spotify
GenericName=Music Player
Comment=Spotify streaming music client
Icon=spotify-client
Exec=spotify %U --force-device-scale-factor=1.5
TryExec=spotify
Terminal=false
Type=Application
Categories=Audio;Music;Player;AudioVideo;
MimeType=x-scheme-handler/spotify;

Sublime Text 3

Sublime Text 3 はディスプレイスケーリングを完全にサポートしています。Preferences > Settings > User Settings から "dpi_scale": 2.0 を設定に追加してください [1]

IntelliJ IDEA

IntelliJ IDEA の HiDPI サポートが機能しない場合、vmoptions ファイルに -Dhidpi=true を追加してください [2]:

/usr/share/intellij-idea-ultimate-edition/bin/idea.vmoptions
/usr/share/intellij-idea-ultimate-edition/bin/idea64.vmoptions

もしくは、$HOME ディレクトリの .vmoptions ファイルに以下を追加します:

echo -Dhidpi=true >> $HOME/.IdeaIC14/idea64.vmoptions

NetBeans

Netbeans では --fontsize パラメータを使うことで起動時にインターフェイスのフォントのサイズを変更することができます。変更を永続的にするには、/usr/share/netbeans/etc/netbeans.conf ファイルを編集して netbeans_default_options プロパティに --fontsize パラメータを追加してください [3]

エディタのフォントサイズは Tools → Option → Fonts & Colors から変えられます。

出力ウィンドウのフォントサイズは Tools → Options → Miscelaneous → Output から変えられます。

GIMP 2.8

GIMP の場合、HiDPI 対応のテーマを使用するか、既存のテーマの gtkrc を変更してください。例えば GimpToolPalette::tool-icon-sizedialog に設定します。

HiDPI ディスプレイ用のテーマである gimp-hidpi も存在します。

Steam

公式 HiDPI サポート

2018年1月25日のベータプログラムから Steam は HiDPI をサポートし自動的に認識します。自動的に認識されない場合、GDK_SCALE=2 を使って適当なスケールファクタを設定してください。

非公式

HiDPI-Steam-Skin をインストールすることで Steam のインターフェイスのフォントサイズを大きくすることができます。完全ではありませんが、可読性は向上します。

ノート: スキンは ~/.local/share/Steam/skins にダウンロードしてください。README に書かれている ~/.steam/skins/ ではありません。

MetroSkin Unofficial Patch も HiDPI 環境の Linux で Steam を使う場合に役立ちます。

Java アプリケーション

AWT/Swing フレームワークを使用する Java アプリケーションは java を起動するときに sun.java2d.uiScale 変数を定義することでスケールを設定できます。例:

$ java -Dsun.java2d.uiScale=2 -jar some_application.jar

Mono アプリケーション

Mono アプリケーションは GTK3 アプリケーションと同じようにスケールします [4]

MATLAB

新しいバージョンの Matlab (R2017b) ではスケールファクタを設定できます:

>> s = settings;s.matlab.desktop.DisplayScaleFactor
>> s.matlab.desktop.DisplayScaleFactor.PersonalValue = 2

設定を適用するには MATLAB の再起動が必要です。

VirtualBox

ノート: 以下の問題はスケーリングを有効にした KDE でのみ発生します。

VirtualBox はシステム全体のスケーリングを仮想モニターにも適用するため、仮想マシンの最大解像度が小さくなってしまいます ([5] を参照)。

スケーリングファクタの逆数を計算して VirtualBox を実行するときに新しいスケーリングファクタを手動で設定することで問題を解決できます。例:

$ QT_SCALE_FACTOR=0.5 VirtualBox --startvm vm-name

Fcitx

Fcitx の preedit FontSize~/.config/fcitx/conf/fcitx-classic-ui.config で変更できます。

他のアプリケーション

run_scaled-gitAUR を使うことでアプリケーションをスケールすることができます (Xpra が内部的に使われています)。

他にも、アプリケーションを VNC デスクトップでフルスクリーンで実行して、装飾を省かせるという方法があります。それからビューアを拡大します。Vncdesk (AURvncdesk-gitAUR でインストールできます) では、アプリケーションごとにデスクトップを設定することができます。vncdesk 2 などのシンプルなコマンドでサーバーとクライアントを起動します。

x11vnc には実験的なオプションとして -appshare があり、アプリケーションウィンドウごとにビューアを開きます。

マルチディスプレイ

HiDPI の設定は全てのデスクトップに適用されるため HiDPI ではない外部ディスプレイには全てが大きく表示されてしまいます。

外部ディスプレイ

xrandr のスケールオプションを使って回避することができます。HiDPI の内部ディスプレイ (eDP-1) の右に HiDPI ではないモニター (DP-1) がある場合、次を実行:

$ xrandr --output eDP-1 --auto --output DP-1 --auto --scale 2x2 --right-of eDP-1

内部ディスプレイを拡張すると、外部ディスプレイに内部ディスプレイの一部が表示されることがあります。その場合、このスクリプト を使うなどしてポジションを手動で設定してください。

マウスが画面の全体で使えないという問題が発生することもあります。これは 既知のバグ であり xserver-org のパッチがあります (もしくはパンするという方法もありますが、別の問題が発生する可能性もあります)。

4k のノートパソコンの右に外付けの 1920x1080 モニターを縮小して右に表示させる例:

$ xrandr --output eDP-1 --auto --output HDMI-1 --auto --panning 3840x2160+3840+0 --scale 2x2 --right-of eDP-1

hidpi のモニターが AxB ピクセルで通常のモニターが CxD、そして [ExF] でスケールする場合、コマンドは以下のようになります:

$ xrandr --output eDP-1 --auto --output HDMI-1 --auto --panning [C*E]x[D*F]+[A]+0 --scale [E]x[F] --right-of eDP-1
ノート: 上記の --scale 2x2 は一部の Nvidia カードでは機能しません。現在のところ解決方法は見つかっていません [6]nvidia-settings を使って CurrentMetaModeForceFullCompositionPipeline=On を設定することで一時的に回避することができます。詳しくは [7] を参照。

複数の外部ディスプレイ

外部ディスプレイが複数あって、DPI が異なるとスケーリングに問題が起こる場合があります。そのようなときは、代わりに HiDPI ディスプレイをダウンスケールしてみてください。例:

xrandr --output eDP1 --scale 0.5x0.5 --output DP2 --right-of eDP1 --output HDMI1 --right-of DP2

HiDPI ディスプレイをダウンスケールすると、HiDPI ディスプレイに表示されるフォントがぼやけますが、外部ディスプレイをアップスケールしたときに発生する滲みとは多少違います。どちらが良いか比較して決めてください。

ミラーリング

ディスプレイをミラーしたい場合、簡単にできます:

HiDPI の解像度が AxB で、外部ディスプレイの解像度が CxD の場合:

$ xrandr --output HDMI --scale [A/C]x[B/D]

例えば QHD の場合 (3200/1920 = 1.66 と 1800/1200 = 1.5):

$ xrandr --output HDMI --scale 1.66x1.5

UHD から 1080p の場合 (3840/1920=2 2160/1080=2):

$ xrandr --output HDMI --scale 2x2

スケーリングによって画面が霞むときは、モニター設定で"シャープネス"パラメータを調整してください。

Linux コンソール

デフォルトのコンソールフォントでは hidpi ディスプレイでとても小さくなってしまいます。kbd パッケージに含まれている一番巨大なフォントは latarcyrheb-sun32 であり、(一時的に) 有効にするには:

$ setfont latarcyrheb-sun32

terminus-font など他のパッケージには大きいフォントとして ter-132n(normal) や ter-132b(bold) が含まれています。詳しくはフォント#コンソールフォントを見てください。

フォントを変更した場合、他の仮想端末 (tty2-6) に切り替えたときに問題が発生することがあります。KMS の特定のモード (例: video=2560x1600@60) を強制的に使うように設定して再起動することで問題は解決します (使用している HiDPI ディスプレイのネイティブ解像度にあわせて設定してください)。

参照