Jak X-server oblicza DPI?

9

Z Xfce Docs :

Jeśli chcesz zastąpić wartość DPI (punktów na cal) obliczoną przez serwer X , możesz zaznaczyć pole wyboru i użyć pola spinania, aby określić rozdzielczość, która ma być używana podczas wyświetlania czcionek na ekranie.

Ale w jaki sposób serwer X dokonuje obliczeń? Jakie założenia zostały przyjęte w trakcie procesu i czy niektóre parametry można zastąpić?

Może wiedzieć, ile pikseli mam na ekranie, ale czy to wystarczy?

Alois Mahdal
źródło

Odpowiedzi:

8

O ile wiem, począwszy od wersji 1.7 xorg domyślnie96 dpi . Nie oblicza niczego, chyba że określisz to DisplaySizeza pomocą Xorgplików konfiguracyjnych. Nie polegaj także na xdpyinfodanych wyjściowych.
Mój laptop działa na Intel SandyBridge. Fragment mojego Xorg.0.logna nowej instalacji Archlinux:

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

bieganie

xdpyinfo | grep -E 'dimensions|resolution'

zwroty:

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

co jest dalekie od prawdy. Ja wiem, że mój rozmiar ekranu jest 344x193mm więc oczywiście xdpyinfooblicza wielkość fizyczną na podstawie pikseli ( 1600x900) i domyślnie 96 DPI. Jeśli dodam

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

w /etc/X11/xorg.conf.d/monitor.confi restart, Xorg.0.logprawidłowo donosi:

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

Jednak xdpyinfo | grep -E 'dimensions|resolution'zawsze powraca:

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

Mimo to nie mam żadnych zmian wizualnych, ponieważ używam Gnome, a 96 DPItakże jest mocno zakodowany gnome-settings-daemon. Po załataniu tego drugiego mogę cieszyć się moim ojczystym 118 DPI. Ale nawet po tym wszystkim xdpyinfowciąż powraca:

dimensions:    1600x900 pixels (423x238 millimeters)
resolution:    96x96 dots per inch
don_crissti
źródło
7

Jak X-server oblicza DPI?

DPI serwera X określa się w następujący sposób:

  1. Opcja -dpiwiersza polecenia ma najwyższy priorytet.
  2. Jeśli nie jest to używane, DisplaySizeustawienie w pliku konfiguracyjnym X służy do uzyskania DPI, biorąc pod uwagę rozdzielczość ekranu.
  3. Jeśli nie, nie DisplaySize, wartości rozmiaru monitora z DDC są używane do uzyskania DPI, biorąc pod uwagę rozdzielczość ekranu.
  4. Jeśli DDC nie określa rozmiaru, domyślnie używane jest 75 DPI.

Może wiedzieć, ile pikseli mam na ekranie, ale czy to wystarczy?

Nie, nie tylko zna rozmiar wirtualnego ekranu w pikselach, ale (zwykle) także fizyczny rozmiar ekranu w milimetrach. Możesz sprawdzić wymiary wyświetlania, uruchamiając następujące polecenie w oknie terminala:

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

Obliczenia wykonywane przez Twój serwer X są następujące:

  • 1366 pikseli podzielonych przez 361 milimetrów pomnożonych przez 25,4 milimetrów na cal = 96,11111136 punktów na cal (DPI).
  • 768 pikseli podzielonych przez 203 milimetry pomnożone przez 25,4 milimetrów na cal = 96,09458128 punktów na cal.

Możesz sprawdzić, jakie DPI obliczył Twój serwer X za pomocą następującego polecenia:

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

Wygląda dobrze, prawda?

Do dalszego czytania:

Afr
źródło
@ alois-mahdal Chyba na początku źle zrozumiałem pytanie. Poprawiłem odpowiedź dodając wymiary wyświetlania używane przez serwer X.
Afr
Domyślnie Xorg ma 96 x 96, niezależnie od rozdzielczości monitora. Myślę, że dzieje się tak, ponieważ programy dostarczają obrazy przeznaczone dla tej standardowej rozdzielczości. Lepiej być trochę mniej niż tworzyć artefakty, cały czas skalując obrazy. Rzeczywista DPI mojego głównego monitora wynosi 93,8. Jednak ustawienie niestandardowego DPI jest przydatne w przypadku dużych wyświetlaczy, takich jak duże telewizory HD, których DPI są znacznie niższe niż 96.
Colin
Wydaje się, że X nie zezwala na ustawienia DPI na monitor dla jednego ekranu, że DPI jest współdzielony na wszystkich monitorach na tym samym ekranie. Stwierdziłem również, że milimetry podane przez xdpyinfonie sumują się z milimetrów od xrandr --query.
CMCDragonkai
0

Kropki na cal = kropki (piksele) / cale (fizyczny rozmiar monitora).

psusi
źródło