2012/04/14

Xfce + マルチディスプレイ環境の片側のディスプレイでフォントが極端に小さ くなる現象への対応

少し時間に余裕が出来る事になってメインデスクトップのUbuntu LTS環境を見直していました。 そろそろ2年振りのLTSアップデートが迫ってきていますしね。

Window ManagerにXfceを使っていますが、:0.0と:0.1のマルチディスプレイ環境にして、ウィンドウがディスプレイ内に留まって互いのデスクトップを移動しないようにしています。 nvidia-settingsでいうところのSeparate X screenという設定です。

気がついたらフォントの大きさがそれぞれのディスプレイXfce上で違った大きさになっていました。Xfceの設定パネルでは「外観」→「Font」で設定が変更できますが、ディスプレイ毎の説明はないので、不可解な動きに戸惑ってしまいました。

環境について

いまのメインデスクトップ環境は次のような環境になっています。

  • CPU: AMD Phenom(tm) II X4 905e (4 core, 2.5GHz)
  • Motherboard: ASUS M5A97 PRO
  • Memory: 16GB (4GBx4)
  • Video Card: NVIDIA GPU GeForce GTS 450
  • Monitor0: EIZO FlexScan L567 (17inch.)
  • Monitor1: EIZO FlexScan L567 (17inch.)

Xfceのフォント設定

設定は「Xfce4設定マネージャー」(xfce4-settings-manager)から変更する事ができます。 フォントは「外観」の「Fonts」タブから変更することができます。

xfce4 Settingsウィンドウ

ディスプレイ毎にフォント設定がおかしくなる現状の解決について

Gnomeではフォントがおかしくならないので、Xfceに原因があるのかなと最初は考えました。

実際Xfceのオプションで改善する事ができたのですが、xdpyinfoはScreen毎に違うDPI設定を返していて、これが原因と考えるのが妥当そうです。

xdpyinfo |grep -i -e resol -e '#' の出力結果


screen #0:
  resolution:    95x96 dots per inch
screen #1:
  resolution:    75x75 dots per inch
解決策

Xfceでは「Fonts」タグの中に「Custom DPI Setting」チェックボックスがあるので、これにチェックを入れて問題は解決しました。

Custom DPI Settingチェックボックス

原因について

DPIが極端に大きかったり、小さかったりした場合に調整する「Custom DPI Setting」が必要な状況がよく分からなかったので、少し調べてみました。

ログを除いてみると、原因は同じディスプレイを使ってMulti Displayにしている事だと分かりました。

grep -C 1 DPI /var/log/Xorg.0.log 出力結果


(II) Apr 12 18:10:15 NVIDIA(0): Virtual screen size determined to be 1280 x 1024
(--) Apr 12 18:10:15 NVIDIA(0): DPI set to (95, 96); computed from "UseEdidDpi" X config
(--) Apr 12 18:10:15 NVIDIA(0):     option
--
(WW) Apr 12 18:10:15 NVIDIA(1): Cannot find size of first mode for Eizo L567 (DFP-0); cannot
(WW) Apr 12 18:10:15 NVIDIA(1):     compute DPI from Eizo L567 (DFP-0)'s EDID.
(==) Apr 12 18:10:15 NVIDIA(1): DPI set to (75, 75); computed from built-in default
(--) Depth 24 pixmap format is 32 bpp

このcannot compute DPIをキーワードに検索してみると、いくつかドキュメントがみつかります。 IgnoreEDIDオプションはうまく動かなかったので、今回はDisplaySizeを指定する事にしました。

xdpyinfoではうまく調整できている方のディスプレイサイズがわかります。 dimensions: 1280x1024 pixels (342x271 millimeters)

/etc/X11/xorg.confのバックアップを取ってから、MonitorセクションにDisplaySizeを追加しました。

xorg.conf変更後のMonitor1用設定

Section "Monitor"
    Identifier     "Monitor1"
    VendorName     "Unknown"
    ModelName      "Eizo L567"
    HorizSync       31.0 - 64.0
    VertRefresh     59.0 - 61.0

    Option         "DPMS"
    DisplaySize 342 270
EndSection

最初は342 271と、そのままの数値を書いていたのですが、342x274と計算されてしまったので、1つ小さい数を指定したところうまく数字が合いました。 ここの挙動はまったく不明ですが、今回はここら辺で終りにしようと思います。

最後に

最終的にはCustom DPI Settingの機能は使わずに動いています。 ここまでやらなくても実用上は問題なかったのですが、xdpyinfoレベルで同じであればアプリケーションの挙動が両方のディスプレイで同じになる裏付けになるので安心できます。

解決後の xdpyinfo | grep -C1 resolution 出力結果

  dimensions:    1280x1024 pixels (342x271 millimeters)
  resolution:    95x96 dots per inch
  depths (7):    24, 1, 4, 8, 15, 16, 32
--
  dimensions:    1280x1024 pixels (342x271 millimeters)
  resolution:    95x96 dots per inch
  depths (7):    24, 1, 4, 8, 15, 16, 32

0 件のコメント: