HiDPI
関連記事
HiDPI (High Dots Per Inch) ディスプレイとは、比較的小さい型で高解像度を誇るディスプレイのことで、Apple の "Retina Display" の名称でも知られています。Apple の製品やハイエンドの "ultrabook" でよく使われています。また、4K (Ultra HD) もしくは 5K モニターも含まれます。
今のところ全てのソフトウェアが高解像度モードで上手く動作するわけではありません。以下では HiDPI の画面での作業を快適する一般的な設定を記載しています。
目次
- 1 デスクトップ環境
- 2 X サーバー
- 3 X Resources
- 4 GUI ツールキット
- 5 ブートマネージャ
- 6 アプリケーション
- 7 マルチディスプレイ
- 8 Linux コンソール
- 9 参照
デスクトップ環境
GNOME
HiDPI を有効にするには、Settings > Devices > Displays から有効にするか、gsettings を使ってインターフェイスのスケールファクタを設定します:
$ gsettings set org.gnome.desktop.interface scaling-factor 2
設定をリセットしたいときは scaling-factor
を 1
に設定してください。
小数値のスケーリング
scaling-factor
で設定できる2や3という数字では、使用している HiDPI ディスプレイや小型スクリーンに適合しない場合があります。
Wayland
実験機能の小数値スケーリングを有効化:
$ gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer']"
Settings > Devices > Displays から小数で設定できるようになります。
Xorg
scaling-factor
と xrandr を組み合わせることで整数以外のスケールファクタが使えます。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
KDE
KDE の設定を使ってフォント・アイコン・ウィジェットのスケーリングを調整できます。Qt と GTK+ 両方のアプリケーションに適用されます。
フォント・ウィジェット・アイコン全てのスケーリングを変更するには:
- システム設定 → ディスプレイとモニター → ディスプレイの設定 → ディスプレイのスケール
- スライダーをドラッグして適当なサイズを設定してください。
- 再起動することで変更が適用されます。
フォントのスケーリングだけ変更するには:
- システム設定 → フォント
- "Force fonts DPI" にチェックを入れて DPI レベルを適当な値に設定してください。新しく起動したアプリケーションから即座に変更が適用されます。Plasma デスクトップに変更を適用するには一度ログアウトする必要があります。
アイコンのスケーリングだけ変更するには:
- System Settings → Icons → Advanced
- カテゴリごとに適切なアイコンサイズを選択してください。変更はすぐに適用されます。
整数以外のディスプレイのスケール
ディスプレイのスケールで整数値を使用しないと Qt アプリケーション (例: Okular) で表示に問題が発生することがあります。
以下の手順で問題を回避できます:
- スケール値を
1
に設定 - フォントとアイコンを設定して "Force fonts DPI" を使うようにする (全てのアプリに変更が適用されますがフォントに問題は起こりません)。
- KDE を再起動
- 必要に応じて
GDK_SCALE
やGDK_DPI_SCALE
を使って GTK アプリを設定してください (#GDK 3 (GTK+ 3) を参照)。
固定サイズのトレイアイコン
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
~/.xinitrc
に xrdb -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 のブログ記事 を参照してください。
手動でスクリーンファクタを設定した場合、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/ヒントとテクニック#フレームバッファの解像度を設定するを見てください。
フォントのサイズを変更する
大きなサイズのフォントを使用する方法があります。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/grub
に GRUB_FONT
行を追加することで GRUB から生成したフォントを使用できます:
/etc/default/grub
GRUB_FONT=/boot/grub/fonts/DejaVuSansMono36.pf2
最後に GRUB の設定を更新してください:
# grub-mkconfig -o /boot/grub/grub.cfg
アプリケーション
ブラウザ
Firefox
Firefox は GDK 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-preview-binAUR) は GTK+ 3 を使用し、skypeforlinux-stable-binAUR パッケージは GTK+ 2 を使用しています。
旧バージョンの Skype (skypeAUR) は Qt 4 を使っており、別個に設定する必要があります。Skype の DPI 設定を変更することはできませんが、フォントサイズは変更することができます。qt4 をインストールして qtconfig-qt4
を実行して設定してください。
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-size
を dialog
に設定します。
HiDPI ディスプレイ用のテーマである gimp-hidpi も存在します。
Steam
公式 HiDPI サポート
2018年1月25日のベータプログラムから Steam は HiDPI をサポートし自動的に認識します。自動的に認識されない場合、GDK_SCALE=2
を使って適当なスケールファクタを設定してください。
非公式
HiDPI-Steam-Skin をインストールすることで Steam のインターフェイスのフォントサイズを大きくすることができます。完全ではありませんが、可読性は向上します。
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
VirtualBox はシステム全体のスケーリングを仮想モニターにも適用するため、仮想マシンの最大解像度が小さくなってしまいます ([5] を参照)。
スケーリングファクタの逆数を計算して VirtualBox を実行するときに新しいスケーリングファクタを手動で設定することで問題を解決できます。例:
$ QT_SCALE_FACTOR=0.5 VirtualBox --startvm vm-name
他のアプリケーション
run_scaled-gitAUR を使うことでアプリケーションをスケールすることができます (Xpra が内部的に使われています)。
他にも、アプリケーションを VNC デスクトップでフルスクリーンで実行して、装飾を省かせるという方法があります。それからビューアを拡大します。Vncdesk (AUR の vncdesk-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
複数の外部ディスプレイ
外部ディスプレイが複数あって、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 ディスプレイのネイティブ解像度にあわせて設定してください)。