Bagaimana X-server menghitung DPI?

9

Dari Xfce Docs :

Jika Anda ingin mengganti nilai DPI (titik per inci) yang dihitung oleh server-X , Anda dapat memilih kotak centang dan menggunakan kotak putar untuk menentukan resolusi yang akan digunakan ketika layar Anda membuat font.

Tetapi bagaimana X-server melakukan perhitungannya? Asumsi apa yang dibuat dalam proses dan dapatkah beberapa parameter ditimpa?

Mungkin tahu berapa banyak piksel yang saya miliki di layar saya, tetapi apakah itu cukup?

Alois Mahdal
sumber

Jawaban:

8

Sejauh yang saya tahu, mulai dengan versi 1.7, xorg default ke96 dpi . Itu tidak menghitung apa pun kecuali Anda menentukan DisplaySizemelalui Xorgfile konfigurasi. Juga, jangan mengandalkan xdpyinfooutput.
Laptop saya berjalan pada Intel SandyBridge. Kutipan dari saya Xorg.0.logdi Archlinux baru instal:

(==) intel(0): DPI set to (96, 96)

berlari

xdpyinfo | grep -E 'dimensions|resolution'

pengembalian:

dimensions:    1600x900 pixels (423x238 millimeters)
resolution:    96x96 dots per inch

yang jauh dari benar. Saya tahu bahwa ukuran layar saya 344x193mm jadi jelas xdpyinfomenghitung ukuran fisik berdasarkan resolusi piksel ( 1600x900) dan default 96 DPI. Jika saya tambahkan

........
DisplaySize     344 193
........

masuk /etc/X11/xorg.conf.d/monitor.confdan mulai ulang, Xorg.0.logdengan benar melaporkan:

(**) intel(0): Display dimensions: (344, 193) mm
(**) intel(0): DPI set to (118, 118)

Namun, xdpyinfo | grep -E 'dimensions|resolution'selalu kembali:

dimensions:    1600x900 pixels (423x238 millimeters)
resolution:    96x96 dots per inch

Tetap saja, tidak ada perubahan visual karena saya menggunakan Gnome, dan 96 DPIjuga sulit dikodekan gnome-settings-daemon. Setelah menambal yang terakhir, saya bisa menikmati bahasa ibu saya 118 DPI. Tetapi bahkan setelah semua itu, xdpyinfomasih kembali:

dimensions:    1600x900 pixels (423x238 millimeters)
resolution:    96x96 dots per inch
don_crissti
sumber
7

Bagaimana X-server menghitung DPI?

DPI server X ditentukan dengan cara berikut:

  1. The -dpibaris perintah pilihan memiliki prioritas tertinggi.
  2. Jika ini tidak digunakan, DisplaySizepengaturan dalam file konfigurasi X digunakan untuk menurunkan DPI, mengingat resolusi layar.
  3. Jika tidak DisplaySizediberikan, nilai ukuran monitor dari DDC digunakan untuk menurunkan DPI, mengingat resolusi layar.
  4. Jika DDC tidak menentukan ukuran, 75 DPI digunakan secara default.

Mungkin tahu berapa banyak piksel yang saya miliki di layar saya, tetapi apakah itu cukup?

Tidak, ia tidak hanya mengetahui ukuran layar virtual dalam piksel tetapi (biasanya) juga ukuran tampilan fisik dalam milimeter. Anda dapat memeriksa dimensi tampilan Anda dengan menjalankan yang berikut di jendela terminal:

 ~ $ xdpyinfo | grep dimension
dimensions:    1366x768 pixels (361x203 millimeters)

Perhitungan yang dilakukan server X Anda adalah sebagai berikut:

  • 1366 piksel dibagi 361 milimeter dikalikan dengan 25,4 milimeter per inci = 96,11191136 titik per inci (DPI).
  • 768 piksel dibagi dengan 203 milimeter dikalikan dengan 25,4 milimeter per inci = 96,09458128 titik per inci.

Anda dapat memeriksa DPI apa yang dihitung oleh server X Anda menggunakan perintah berikut:

 ~ $ xdpyinfo | grep resolution
 resolution:    96x96 dots per inch

Terlihat bagus, bukan?

Untuk bacaan lebih lanjut:

Afr
sumber
@ alois-mahdal Saya kira saya salah mengerti pertanyaan pada awalnya. Saya telah meningkatkan jawaban dengan menambahkan dimensi tampilan yang digunakan oleh X server.
Afr
Xorg default ke 96x96 terlepas dari resolusi monitor. Saya pikir ini karena program menyediakan gambar yang dimaksudkan untuk dpi standar ini. Lebih baik sedikit off daripada membuat artefak dengan menskala gambar sepanjang waktu. DPI aktual monitor utama saya adalah 93,8. Namun, pengaturan DPI khusus berguna untuk tampilan besar seperti HDTV besar yang DPInya jauh lebih rendah dari 96.
Colin
X tampaknya tidak mengizinkan pengaturan DPI per monitor untuk satu layar, bahwa DPI dibagi di semua monitor dalam layar yang sama. Saya juga menemukan bahwa milimeter yang diberikan xdpyinfotidak bertambah dari milimeter dari xrandr --query.
CMCDragonkai
0

Dots Per Inch = Dots (pixel) / Inches (ukuran fisik monitor).

psusi
sumber