Como o X-server calcula o DPI?

9

Do Xfce Docs :

Caso deseje substituir o valor de DPI (pontos por polegada) calculado pelo servidor X , você pode marcar a caixa de seleção e usar a caixa de seleção para especificar a resolução a ser usada quando a tela renderizar fontes.

Mas como o X-server faz seu cálculo? Que suposições são feitas no processo e alguns dos parâmetros podem ser substituídos?

Pode saber quantos pixels tenho no meu monitor, mas isso é suficiente?

Alois Mahdal
fonte

Respostas:

8

Até onde eu sei, a partir da versão 1.7, o xorg padrão é96 dpi . Ele não calcula nada, a menos que você especifique DisplaySizevia Xorgarquivos de configuração. Além disso, não confie na xdpyinfosaída.
Meu laptop é executado no Intel SandyBridge. Trecho do meu Xorg.0.logem uma nova instalação do Archlinux:

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

corrida

xdpyinfo | grep -E 'dimensions|resolution'

retorna:

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

o que está longe de ser verdade. Eu sei que o tamanho da minha tela é 344x193mm, então obviamente xdpyinfocalcula o tamanho físico com base na resolução de pixels ( 1600x900) e no padrão 96 DPI. Se eu adicionar

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

no /etc/X11/xorg.conf.d/monitor.confe reinicie, Xorg.0.logreporta corretamente:

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

No entanto, xdpyinfo | grep -E 'dimensions|resolution'sempre retorna:

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

Ainda assim, não há alterações visuais porque estou usando o Gnome e 96 DPItambém é codificado gnome-settings-daemon. Depois de corrigir o último, eu posso aproveitar meu nativo 118 DPI. Mas mesmo depois de tudo isso, xdpyinfoainda retorna:

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

Como o X-server calcula o DPI?

O DPI do servidor X é determinado da seguinte maneira:

  1. A -dpiopção de linha de comando tem a maior prioridade.
  2. Se isso não for usado, a DisplaySizeconfiguração no arquivo de configuração X é usada para derivar o DPI, dada a resolução da tela.
  3. Se não DisplaySizefor fornecido, os valores de tamanho do monitor do DDC são usados ​​para derivar o DPI, dada a resolução da tela.
  4. Se o DDC não especificar um tamanho, 75 DPI será usado por padrão.

Pode saber quantos pixels tenho no meu monitor, mas isso é suficiente?

Não, ele não apenas conhece o tamanho da tela virtual em pixels, mas (geralmente) também o tamanho da tela física em milímetros. Você pode verificar suas dimensões de exibição executando o seguinte em uma janela do terminal:

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

O cálculo que o seu servidor X está fazendo é o seguinte:

  • 1366 pixels divididos por 361 milímetros multiplicados por 25,4 milímetros por polegada = 96,11191136 pontos por polegada (DPI).
  • 768 pixels divididos por 203 milímetros multiplicados por 25,4 milímetros por polegada = 96,09458128 pontos por polegada.

Você pode verificar qual DPI o servidor X calculou usando o seguinte comando:

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

Parece bom, não é?

Para leitura adicional:

Afr
fonte
@ alois-mahdal Acho que não entendi a pergunta a princípio. Melhorei a resposta adicionando as dimensões de exibição usadas pelo servidor X.
Afr
O padrão do Xorg é 96x96, independentemente da resolução do monitor. Eu acho que isso ocorre porque os programas fornecem imagens destinadas a este dpi padrão. É melhor ficar um pouco fora do que criar artefatos dimensionando imagens o tempo todo. O DPI real do meu monitor principal é 93,8. No entanto, definir costume DPI é útil para telas grandes, como grandes HDTVs cujos DPI são muito mais baixos do que 96.
Colin
O X parece não permitir configurações de DPI por monitor para uma única tela; esse DPI é compartilhado entre todos os monitores na mesma tela. Também descobri que os milímetros dados por xdpyinfonão somam milímetros de xrandr --query.
CMCDragonkai
0

Pontos por polegada = pontos (pixels) / polegadas (tamanho físico do monitor).

psusi
fonte