現在の物理的なdpiを調べる

パピーを名犬にするための技、テクニック

モデレータ: 暇人, YoN, nyu

返信する
rsurf
記事: 86
登録日時: 09/01/03(土) 12:42

現在の物理的なdpiを調べる

投稿記事 by rsurf »

実行例には「BenQ GL2450H」を使用しています。モニタ切替器「コレガ PC2KVMS」を経由しています(これはレスポンスが遅くなるせいかwary511では起動時に10%位の確率でモニタを見失う品です)。
製品仕様は24in最大1920x1080、最大表示領域=531.36x298.89mm、最小画素ピッチ(mm)=0.276、最大dpi=92です。


自動認識はモニタへのステータス問い合わせ機能を使って状態取得します。しかし、周辺機器やドライバによってはデータが化けたり、異なる計算結果になっていたりします。
原則的にはxorg引数>「xorg.conf」の設定>自動検出の優先度になっています(例外有り)。
「xorg.conf」の「Section "Monitor"」に「DisplaySize 表示幅 表示高さ # mm単位」を記述可能です。
pup571では「xdpyinfo」コマンドに反映されます(pup431では無視される)。
他にドライバによってはdpi(x,y)の記述が可能らしい(自分の環境では試せない)です。

▽自動認識1:以下の1行を実行(選択して端末に2ボタン(ホイールボタン)ペースト)
grep 'DPI set to (\|Monitor name:\|Image Size:\|Display dimensions:\|hsize:' '/var/log/Xorg.0.log'
▼例)pup571での結果
[ 12.009] (II) intel(0): #0: hsize: 1280 vsize 800 refresh: 60 vid: 129
[ 12.009] (II) intel(0): #1: hsize: 1280 vsize 720 refresh: 60 vid: 49281
[ 12.009] (II) intel(0): #2: hsize: 1280 vsize 1024 refresh: 60 vid: 32897
[ 12.009] (II) intel(0): #3: hsize: 1600 vsize 900 refresh: 60 vid: 49321
[ 12.009] (II) intel(0): #4: hsize: 1680 vsize 1050 refresh: 60 vid: 179
[ 12.009] (II) intel(0): #5: hsize: 1920 vsize 1080 refresh: 60 vid: 49361
[ 12.009] (II) intel(0): clock: 148.5 MHz Image Size: 531 x 298 mm
[ 12.009] (II) intel(0): Monitor name: BenQ GL2450H
[ 12.009] (**) intel(0): Display dimensions: (530, 300) mm
[ 12.009] (**) intel(0): DPI set to (92, 91)
▼例)pup431q3だとYの値がおかしい
(**) intel(0): DPI set to (92, 162)

▽自動認識2:以下の2行を実行(選択して端末に2ボタン(ホイールボタン)ペースト)
xdpyinfo | grep 'dimensions:\|resolution:' # モニター自動検出されたdpi(実際と合わない場合有り)
xrdb -query | grep 'dpi:' # ~/.Xresourcesの設定値
▼例)pup571での結果(「xorg.conf」修正後)
dimensions: 1920x1080 pixels (531x299 millimeters)
resolution: 92x92 dots per inch
Xft.dpi: 96

pup571では実寸より小さく認識(531.36x298.89mm=92dpi)→(507x285mm=96dpi)
(安定はしているのでブラウン管みたいに外枠を除外している?)
「xorg.conf」の「Section "Monitor"」に「DisplaySize 531 299 # mm単位」を追加したら正常値になった。
pup431q3では追加設定無しで正常値(531x298mm=92dpi)(「xorg.conf」のDisplaySize設定は無視される)


手動計算は手で計算します。PC環境に影響されないので一番当てになると思います。

▽モニタインチサイズから計算:以下の12行を実行(英大文字項目の値を設定して選択して端末に2ボタン(ホイールボタン)ペースト)
# dpi計算 (1in=25.4mm)
MON_IN=24 # モニタインチサイズ
RES_X=1920 # 使用する横解像度
RES_Y=1080 # 使用する縦解像度
Res_xy=$(bc <<<"scale=5;sqrt($RES_X^2+$RES_Y^2)") # 対角線の長さpix
Mon_xmm=$(bc <<<"scale=5;$RES_X*25.4*$MON_IN/$Res_xy") # 横mm
Mon_ymm=$(bc <<<"scale=5;$RES_Y*25.4*$MON_IN/$Res_xy") # 縦mm
Mon_xin=$(bc <<<"scale=5;$RES_X*$MON_IN/$Res_xy") # 横in
Mon_yin=$(bc <<<"scale=5;$RES_Y*$MON_IN/$Res_xy") # 縦in
Mon_xdpi=$(bc <<<"scale=5;$RES_X/$Mon_xin") # 横dpi
Mon_ydpi=$(bc <<<"scale=5;$RES_Y/$Mon_yin") # 縦dpi
echo "モニタ表示サイズ(mm):($Mon_xmm, $Mon_ymm) モニタdpi:($Mon_xdpi, $Mon_ydpi)"
▼例)モニタサイズ(mm):(531.31244, 298.86325) モニタdpi:(91.78781, 91.78787)

▽表示部分を計測して計算:以下の9行を実行(英大文字項目の値を設定して選択して端末に2ボタン(ホイールボタン)ペースト)
# dpi計算 (1in=25.4mm) 横長モニタで横枠付き3:2表示したような場合
MON_XMM=397 # 横mm 表示部分を巻尺で計る
MON_YMM=298 # 縦mm 表示部分を巻尺で計る
RES_X=800 # 使用する横解像度
RES_Y=600 # 使用する縦解像度
Mon_xdpi=$(bc <<<"scale=5;25.4*$RES_X/$MON_XMM") # 横dpi
Mon_ydpi=$(bc <<<"scale=5;25.4*$RES_Y/$MON_YMM") # 縦dpi
Mon_xyin=$(bc <<<"scale=5;sqrt($MON_XMM^2+$MON_YMM^2)/25.4") # 対角線の長さin
echo "モニタ表示インチサイズ(in):($Mon_xyin) モニタdpi:($Mon_xdpi, $Mon_ydpi)"
▼例)モニタ表示インチサイズ(in):(19.54330) モニタdpi:(51.18387, 51.14093)

▽画素ピッチ(mm)の求め方
表示部分の横幅(mm)を巻尺で計測して使用中の横解像度(pix)で割ります
bc <<<"scale=5;531/1920" # pixp
▼例).27656

▽画素ピッチ(mm)から計算:以下の3行を実行(英大文字項目の値を設定して選択して端末に2ボタン(ホイールボタン)ペースト)
# dpi計算 画素ピッチ(mm)から (1in=25.4mm)
PIXP=0.276 # 画素ピッチ(mm)
bc <<<"scale=5;25.4/$PIXP" # dpi
▼例)92.02898

メニュー→デスクトップ→文字の大きさ
リストから物理的なdpiが近いものを選びます(75がdefaultですがiconは96が最小値扱いです)。
ただしビットマップフォントを使わないならば、「~/.Xresources」の「Xft.dpi」の値を直接設定した方が良いかも知れません。
_________________
OS:[pup-431JPqs3.sfs+fixmenus_on_locale-20100425|puppy_precise_5.7.1JP.sfs](手動frugal_ext4)+grub4dos(v0.4.4) CPU:Celeron_E3400 RAM:DDR2_2GB HDD:HGST_SATA1TB MB:G31M-S2L(G31+ICH7 BIOS:F10f Audio:ALC662 LAN:RTL8111C(r8168.ko) VGA:Onboard(Xorg,1920x1080,96dpi))
================================================
返信する