HiDPI
関連記事
HiDPI (High Dots Per Inch) ディスプレイとは、比較的小さい型で高解像度を誇るディスプレイのことで、Apple の "Retina Display" の名称でも知られています。Apple の製品やハイエンドの "ultrabook" でよく使われています。また、4K (Ultra HD) もしくは 5K モニターも含まれます。
今のところ全てのソフトウェアが高解像度モードで上手く動作するわけではありません。以下では HiDPI の画面での作業を快適する一般的な設定を記載しています。
目次
デスクトップ環境
GNOME
HiDPI を有効にするには、gsettings を使ってインターフェイスのスケールファクタを設定します:
$ gsettings set org.gnome.desktop.interface scaling-factor 2
設定をリセットしたいときは scaling-factor
を 1
に設定してください。
scaling-factor
で設定できる2や3という数字では、使用している HiDPI ディスプレイや小型スクリーンに適合しない場合があります。
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 Plasma 5 は HiDPI ディスプレイの優れたサポートを有しています。X サーバーがディスプレイのピクセル密度を正しく認識するように設定するだけで後は勝手にやってくれます。/etc/sddm.conf
を編集して [X11]
セクションの ServerArguments
に dpi 引数を追加してください:
ServerArguments=-nolisten tcp -dpi 276
詳しい情報は Xorg#画面サイズと DPI を見てください。
マルチディスプレイ構成
全てのディスプレイの DPI が同じであれば上記の設定で上手くいきますが、ディスプレイの出力が異なる場合はディスプレイごとにスケールさせる必要があります:
- システム設定 → ディスプレイとモニター → ディスプレイの設定 → ディスプレイのスケール
- スライダーを 2 までドラッグしてください。
- 一度ログアウトしてログインしなおすと全てのアプリケーションに新しい設定が適用されます。
固定サイズのトレイアイコン
トレイアイコンがスケールしない場合、/usr/share/plasma/plasmoids/org.kde.plasma.private.systemtray/contents/config/main.xml
の iconSize でデフォルトのサイズ値を設定できます:
/usr/share/plasma/plasmoids/org.kde.plasma.private.systemtray/contents/config/main.xml
<entry name="iconSize" type="Int"> <label>Default icon size for the systray icons, it's an enum which values mean, Small, SmallMedium, Medium, Large, Huge, Enormous respectively. On low DPI systems they correspond to 16, 22, 32, 48, 64, 128 pixels. On high DPI systems those values would be scaled up, depending on the DPI.</label> <default>2</default> </entry>
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/ を参照。
ディスプレイマネージャ
SDDM
SDDM を拡大するには /etc/sddm.conf
の以下のプロパティを変更してください。ファイルを編集する前にバックアップを作成することを推奨します。
[X11] # X server arguments ServerArguments=-nolisten tcp -dpi 144
Xrandr を使用する方法
ServerArguments で設定できない場合、xrandr で直接 DPI を変更できます。/etc/sddm.conf
を編集して以下のセクションを追加してください:
[X11] # script to execute when starting the display server # default to /usr/share/sddm/scripts/Xsetup DisplayCommand=/etc/sddm/Xsetup
そして以下の内容の /usr/share/sddm/scripts/Xsetup
を /etc/sddm/Xsetup
にコピーします:
#!/bin/sh # Xsetup - run as root before the login dialog appears /usr/bin/xrandr --dpi 144
設定パラメータについて詳しくは sddm.conf(5)
を読んでください。
ブートマネージャ
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 の高度な設定のページ (about:config
) を開いて layout.css.devPixelsPerPx
パラメータを 2
に設定してください (2
は Retina スクリーンに合った数値です、必要に応じて数値を変更してください)。
Firefox バージョン 38 以降から、システム設定 (GTK+ 3.10) が適用されるようになっています [1]。
メニューや URL バーのフォントが小さい場合は userChrome.css
ファイルを作成することで明示的にフォントサイズを設定できます。ファイルは $HOME/.mozilla/firefox/*.default/chrome/
フォルダに保存してください。chrome フォルダは自分で作成する必要があります。別の場所にある chrome フォルダに css ファイルを保存しても適用されません。
css ファイルの中身は以下のようにします:
@namespace url("https://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); /* set default namespace to XUL */ * { font-size: 16px !important; }
設定ページが小さい場合、設定 -> コンテンツ -> フォントと配色 -> 詳細設定から最小フォントサイズを設定してみてください。
Chromium / Google Chrome
バージョン 43.0.2357.2-1 からメインブランチの google-chromeAUR で完全な HiDPI サポートが含まれており、何も設定しなくても動作します (Gnome と Cinnamon でテスト済み)。また、AUR の古い Chrome パッケージでは、chromium パッケージと同じように、--force-device-scale-factor
コマンドラインフラグを使ってブラウザを起動することができます。全てのコンテンツと ui、さらにタブやフォントサイズがスケールします。例:
$ chromium --force-device-scale-factor=2
このオプションを使う場合、スケールファクター1が通常のスケーリングです。少数点を使うこともできます。
Retina ディスプレイのような HiDPI モニターと別のモニターを一緒に使用する場合、reszoom 拡張を使うことで使用しているディスプレイにあわせてズームレベルを自動的に調整することができます。
Opera
バージョン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 の設定)。
一般的にいって、Opera の HiDPI サポートは優れています。また、Chrome の blink レンダラを使って作成されているので、ほとんどの Chrome 拡張が動作します。HiDPI のサポートが上手く行っている Chrome として使うことができるでしょう。
メールクライアント
Thunderbird
Firefox を見てください。about:config
にアクセスするには、Edit → Preferences → Advanced → Config editor を開きます。
Wine アプリケーション
次を実行して、"画面"タブの"画面の解像度"設定を変更してください:
$ winecfg
フォントのサイズにだけ影響を与えます。
Skype
新しい Skype for Linux Alpha (skypeforlinuxAUR[リンク切れ: パッケージが存在しません]) は GTK+ 3 を使用し、skypeforlinux-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;
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 も存在します。
VLC
2015年5月現在、AUR にある git バージョン vlc-gitAUR の VLC で問題は解決します。
Qt5 によって HiDPI ディスプレイが検出されて、フルスクリーンで再生されている場合でも、動画がウィンドウの隅に表示されて無駄な領域が生まれることがあります。QT_AUTO_SCREEN_SCALE_FACTOR=0
を使って VLC を起動することで問題は解決しますが、インターフェイスが小さくなってしまいます (ソース)。
Steam
HiDPI-Steam-Skin をインストールすることで Steam のインターフェイスのフォントサイズを大きくすることができます。完全ではありませんが、可読性は向上します。
MetroSkin Unofficial Patch も HiDPI 環境の Linux で Steam を使う場合に役立ちます。
他のアプリケーション
アプリケーションを 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
ミラーリング
ディスプレイをミラーしたい場合、簡単にできます:
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=1.98):
$ xrandr --output HDMI --scale 2x1.98
スケーリングによって画面が霞むときは、モニター設定で"シャープネス"パラメータを調整してください。
Linux コンソール
デフォルトのコンソールフォントでは hidpi ディスプレイでとても小さくなってしまいます。kbd パッケージに含まれている一番巨大なフォントは latarcyrheb-sun32
であり、(一時的に) 有効にするには:
$ setfont latarcyrheb-sun32
terminus-font など他のパッケージには大きいフォントとして ter-132n
(normal) や ter-132b
(bold) が含まれています。詳しくはフォント#コンソールフォントを見てください。
フォントを変更した場合、他の仮想端末 (tty2-6
) に切り替えたときに問題が発生することがあります。KMS の特定のモード (例: video=2560x1600@60
) を強制的に使うように設定して再起動することで問題は解決します (使用している HiDPI ディスプレイのネイティブ解像度にあわせて設定してください)。