HiDPI no Linux, especificamente KDE

Os monitores com resolução de 4K não são mais considerados parte da burguesia e estão gradualmente entrando na vida das pessoas comuns. Bem como monitores de outras altas resoluções. Há alguns anos, eu falei sobre o suporte a esses monitores no Linux, dizendo que "em vez de sim". Parecia haver suporte, mas o número de falhas com ele tornava todo o processo inútil, e eu realmente queria mudar o monitor para uma resolução mais baixa. O que alguns monitores 4K não permitem no Linux até agora. O fato é que os drivers da NVidia, quando conectados via DisplayPort, acreditam ingenuamente no EDID do monitor e, se apenas uma resolução máxima estiver gravada, eles não permitirão definir outra. Você deve reverter para o Nouveau ou configurar o HiDPI. Vamos personalizar! (O artigo é destinado a uma pessoa que conhece o básico do Linux e o que é um servidor X).

Sobre o DPI em geral e o HiDPI em particular


DPI (pontos por polegada) é um valor que indica quantos pixels da tela são o centímetro físico de sua área. Se o monitor funcionar em resolução não nativa, estamos falando de pixels de resolução virtual. Desde os tempos antigos até muito recentemente, 96 DPI era o padrão - ou seja, os monitores comuns, se diferiam dele, eram tanto que isso poderia ser negligenciado. 120 DPI já foi o valor máximo que foi comumente testado.

Não é de surpreender que, por tantos anos, os desenvolvedores de software tenham tomado esse valor como uma constante inabalável. De repente, vieram os monitores com 160-192 DPI e começaram. Todos os programas com pelo menos um determinado tamanho na interface foram configurados em pixels, recebendo painéis sobrepostos, assinaturas aparadas na primeira letra e botões, pelos quais você deve dar um prêmio em dinheiro por pressionar com êxito.

A palavra HiDPI refere-se à situação em monitores com DPI> 160. O DPI do sistema operacional não é necessariamente igual ao DPI da tela. Pelo contrário, os sistemas DPI podem ser alterados para aumentar e diminuir a interface. Além disso, os sistemas distinguem entre DPI de tudo, DPI de fontes e DPI fornecido para aplicativos em tela cheia.

E os outros?


Makos ajudou seu governo autoritário. Como quase todos os programas criam sua interface através da mesma API, ela foi simplesmente consertada e funcionou imediatamente. Batentes indestrutíveis separados enfatizam apenas como tudo é bom em geral.

O Android nasceu em sistemas com uma grande dispersão de DPI, por isso foi capaz de fazer tudo, desde a própria fralda, e os livros didáticos para programadores levaram isso em conta.

O Windows sempre permitia que as fontes DPI fossem distorcidas. Aqui estão apenas os gráficos DPI, isso não mudou. Elementos individuais mudaram de tamanho porque estavam vinculados ao tamanho da fonte ou tela. Mas os tamanhos especificados em pixels não mudaram disso. No Win 10, finalmente, havia suporte normal ao HiDPI, mas apenas para programas escritos para o Win 10. De resto, foi escrita uma muleta que simplesmente fazia um aumento gráfico na janela do programa com a tradução da posição dos cliques. O zoom torna a janela embaçada e a transmissão funciona de maneira torta. A pior parte é que esse aumento também está tentando iniciar aplicativos em tela cheia. Para jogar, é preciso desligá-lo e, em seguida, trabalhar.

E o Linux?


E no Linux, como sempre, uma bacanal. Temos dois conjuntos principais para a GUI (Qt e GTK), cada um dos quais sobreviveu recentemente a reescrever do zero, portanto as versões antiga e nova ainda estão em uso. Além de alguns conjuntos menores (EFL, wxWidgets). Além de várias linguagens que usam suas ferramentas para isso, por exemplo, Java. Além de algumas bibliotecas antigas nas quais ninguém escreve, mas o software necessário ainda existe nelas. (GTK 1, Motif) Mesmo que o servidor X e o gerenciador de janelas manuseiem corretamente o DPI, não é fato que todo esse zoológico aceitará essas informações e funcionará bem.

Você pode não gostar muito do Ubuntu com Unity, mas tenho uma coisa a dizer. Não sei como configurar o HiDPI no Unity, porque tudo sempre funcionou imediatamente. Todos os outros DEs: Canela, KDE, XFCE, também possuem uma bandeira correspondente. Este sinalizador define o próprio DE, aplicativos escritos em sua biblioteca principal (apenas a nova versão) e alguns sinalizadores para Qt / GTK. E o resto está de lado. Como resultado, por exemplo, nos jogadores, o botão Reproduzir permanece pequeno. E os ícones da bandeja são pequenos, mas não todos. Um ano após esse sistema - e a pessoa em Overwatch joga apenas para McCrack, porque a pessoa tem precisão pixel por pixel no mouse e odeia todo mundo.

Vou falar sobre como configurar o KDE. Não conforme as instruções, mas para que tudo funcione. Deadbeef, Yakuake, Liquidificador. Eu verifiquei principalmente no Arch. Em outras distribuições, pode ser que parte do que descrevo já tenha sido feita ou feita de maneira diferente. Pense com a cabeça ou escreva nos comentários - nós vamos descobrir.

Configuração X


A primeira coisa a verificar é se X sabe que temos HiDPI? Para fazer isso, precisamos do softink xdpyinfo - ele está no nabo. Defina, se não estiver instalada, a resolução nativa do monitor (e reinicie o X.) Execute no console dentro do X (ou seja, não com Ctrl-Alt-F *).

 xdpyinfo | grep -B 2 resolution screen #0: dimensions: 3840x2160 pixels (621x341 millimeters) resolution: 157x161 dots per inch 

Vemos três pares de valores - resolução da tela, tamanhos reais da tela e DPI (separadamente na vertical e na horizontal). Se todos os três pares forem semelhantes à verdade, afaste-se do monitor e elogie a entidade mais alta de sua escolha; pois se xdpyinfo retorna bobagens e DPI = 96, seu ser superior envia tribulações.

As causas mais comuns de DPIs incorretas são as curvas EDID e a marca de lenha na placa de vídeo. Não direi nada sobre as placas de vídeo ATi, pois as estou evitando. Não que eles sejam ruins, mas ATi + Linux = problemas desnecessários. Com a Intel, tudo deve funcionar. NVidia até DPI apodrecido recentemente. Primeiro, desative o G-sync nas nvidia-settings , de qualquer maneira, nenhum gerente composto é amigo dele. Se isso não ajudar, ative o KMS. Configuração do modo do kernel é o método pelo qual o kernel do Linux, em vez do X, gerencia a resolução da tela. Além do uso direto, isso permite que você contorne muitos códigos de buggy há 20 anos no X. Infelizmente, o procedimento para habilitar o KMS em drivers proprietários da Nvidia depende da distribuição, portanto, eu o descreverei apenas em termos gerais. Você precisa adicionar os módulos nvidia, nvidia_modeset, nvidia_uvm, nvidia_drm no initramfs, reconstruí-lo e, em seguida, adicionar o parâmetro nvidia-drm.modeset=1 ao kernel. Google.

Se no parágrafo anterior você não entendeu nada, pode simplesmente abandonar a lenha da marca NVidia e usar o Nouveau por enquanto - o KMS está fora da caixa. No Kubunt, isso é feito através de um programa que gerencia drivers.

Se todas as opções acima não ajudarem e o xdpyinfo ainda gravar lixo, talvez os drivers de vídeo não sejam os culpados, mas as curvas EDID do monitor. Primeiro, execute o xrandr --dpi 192 no mesmo console. E execute algum programa. Se ele se tornou maior, o método funciona. Cole este comando no .xprofile e reinicie o .xprofile No futuro, falarei muito sobre .xprofile . Este é um arquivo na pasta inicial de cada usuário que configura a operação de aplicativos gráficos. Caso contrário, crie-o: touch ~/.xprofile . Se tudo funcionasse - Hooray! Caso contrário, verifique primeiro se a sua distribuição não possui suporte a .xprofile do KDE. Por que adicionar algo como touch ~/net_ne_vyrezali e reiniciar novamente.

Ainda não está funcionando? Vamos registrar o DPI no X manualmente. Crie, se ainda não, o arquivo /etc/X11/xorg.conf.d/90-monitor.conf e escreva-o:

 Section "Monitor" Identifier "Prikolny monitor" DisplaySize 286 179 #   EndSection 

E para a Nvidia marca lenha

 Section "Monitor" Identifier "Prikolny monitor" Option "DPI" "192 x 192" EndSection 

Observe que em todos os lugares que defino o valor forçado do DPI para 192, ou melhor, para qualquer valor múltiplo de 96. Funciona com mais precisão do que o DPI real, porque é um tipo de flor. Aqui o paradoxo do designer funciona:

  • Se o DPI for múltiplo de 96, as fontes serão melhor renderizadas nos aplicativos que funcionam com texto. Especialmente nos aplicativos do Cairo.
  • Se o DPI for igual ao DPI real do monitor, a escala 1: 1 na tela terá o mesmo tamanho que no papel.

Escrevi o nome estúpido do monitor para que, em todos os utilitários gráficos, seja possível ver que nossa configuração está sendo lida e tentando aplicar.

Salve, reinicie o X e se regozije. Ou beba amargo e espere Wayland terminar.

Configuração no KDE


Então, finalmente, configuramos o HiDPI no KDE corretamente. No menu → Configurações do sistema → Exibir e monitorar, na parte inferior, existe um botão grande de exibição em escala . Ao pressioná-lo, uma janela com um único controle deslizante de Escala aparece. Agora atenção! Se você ainda não conseguiu configurar o DPI no Xs, feche este artigo, defina o valor do controle deslizante a gosto e aproveite o que funciona. E o que não funciona - reconcilie-se (geralmente é Chrome, Skype, QtCreator, Yakuake, GTK).

Se o DPI em Xs estiver correto, não toque nesse controle deslizante! Idealmente, nem torça para frente e para trás, porque, ao que parece, ele está escrevendo algo em algum lugar. Feche esta janela nafig. De acordo com a postagem do blog do criador desse controle deslizante (sal nos comentários), ele substitui o DPI do sistema e define mais algumas variáveis. O problema é que nem todos os programas veem essa redefinição e acaba sendo uma bagunça. Portanto, não tocaremos no controle deslizante, mas configuraremos tudo manualmente.

Em geral, nesta fase, se o DPI estiver correto, tudo já deverá ser grande o suficiente. Vá para Configurações do sistema → Fontes . Por padrão, o tamanho da fonte é 11. Se 10-14 é suficiente para você alcançar a harmonia - coloque-o, os aplicativos serão atualizados. Se mais ou menos - faz sentido tentar subsistema DPI, conforme descrito acima. Abaixo está o campo Force Font DPI. Você pode alterá-lo se quiser, mas lembre-se de que nem todos os aplicativos leem esse valor. Nem isso. Alguns aplicativos não leem esse valor em todas as suas partes. Portanto, se você tentar corrigir o DPI do sistema em 96 aqui, haverá uma bagunça. Mas você pode aumentar o DPI 167 do monitor para o 192 ideal.

Feche a janela de fontes. Em geral, agora é a hora de reiniciar o X e ver o que aconteceu. Eles devem funcionar e ter um tamanho conveniente para o KDE, todas as suas configurações e aplicativos. O painel de plasma, a propósito, não crescerá por si só. Mas é vetorial, e você sempre pode esticá-lo - clique no sanduíche à esquerda e os botões aparecerão. Além disso, o tamanho no Dolphin deve ser definido manualmente. Se, em algum outro lugar dos aplicativos KDE, os botões e os painéis forem muito pequenos, será necessário dimensionar o tamanho dos ícones em Configurações do Sistema → Ícones.

Nós configuramos outros aplicativos


Chrome, Atom e outros


Esses aplicativos leem o DPI diretamente de onde ele vem e o seguem como o código de um cavaleiro. Se eles lerem algo errado, parecerão errados. Geralmente eles ignoram as configurações nas Configurações do sistema e seguem o DPI que o xdpyinfo retorna. Se houver 96, no Chrome, você poderá usar o argumento --force-device-scale-factor=2 ; no Atom, há um plug-in hidpi curve no nabo oficial, para outros programas suas muletas.

QtCreator, Yakuake e outros aplicativos Qt5


Em geral, eles devem funcionar . Mas o QtCreator às vezes não escala a barra de ferramentas, enquanto o Yakuake não possui a barra de guias. O motivo está no bug e na variável de ambiente QT_AUTO_SCREEN_SCALE_FACTOR . Quando é igual a 1 , Qt5 tenta encontrar o próprio valor de DPI e, quando 0 - espera que esse valor seja atribuído a ele em outras variáveis. O problema é que o KDE passa lixo.

Em resumo, esses aplicativos precisam definir a variável QT_AUTO_SCREEN_SCALE_FACTOR=1 e tudo funcionará. Isso pode ser feito de maneira seletiva ou global. Seletivamente no Editor de menus. Lembre-se de adicionar o aplicativo ao painel e executar automaticamente mais tarde. Isso ocorre porque as entradas .desktop são copiadas, não vinculadas. A segunda opção é definir essa variável em todo o sistema, em .xprofile ou mesmo / etc / environment , ou onde as variáveis ​​são gravadas em sua distribuição. Existem duas nuances. Primeiro, o KDE redefine à força essa variável para 0 no script / usr / bin / startkde . Você precisará abri-lo e editá-lo #export QT_AUTO_SCREEN_SCALE_FACTOR=0 a linha #export QT_AUTO_SCREEN_SCALE_FACTOR=0 . Depois disso, lembre-se de repetir esse patch toda vez que o KDE for atualizado. A segunda ressalva é que os desenvolvedores do KDE alertam nos comentários: definir essa variável globalmente pode fazer com que alguns aplicativos Qt5 sejam duplamente impulsionados. Mas isso não está acontecendo para mim. Além disso, se o DPI do sistema estiver incorreto, você precisará definir a variável QT_SCALE_FACTOR=2 no perfil .x .

Lembre-se de que a variável QT_DEVICE_PIXEL_RATIO obsoleta. Se você o colocar em algum lugar, será necessário removê-lo.

Aplicativos Qt4


Esses aplicativos, em geral, não são bons no HiDPI. Mas nem tudo está perdido. O Qt4 cria uma interface muito flexível. Execute qtconfig-qt4 . Primeiro, observe a fonte e defina um tamanho conveniente. Em seguida, na guia Interface, encontre uma muleta chamada “ Suporte global ” (na tradução - uma muleta global.) Essa configuração significa que as instâncias do QWidget e seus descendentes não podem ser menores que esse tamanho em pixels, independentemente do que façam. Usando a Largura Mínima, você pode definir a largura das barras de rolagem e usando a Altura Mínima - a altura das barras de ferramentas.

Aplicativos GTK3


Tudo é simples aqui. Você precisa definir duas variáveis ​​no .xprofile :

GDK_SCALE=2 Comando GTK para aumentar tudo em 2 vezes. O valor deve ser um número inteiro. GDK_DPI_SCALE ajusta a ampliação da fonte. Se após GDK_SCALE fontes forem grandes, você precisará definir GDK_DPI_SCALE=0.5

GTK2 Apps


Tudo é complicado aqui. O GTK2 não sabe como HiDPI. Mas há um hack. O Softina chamado Oomox é um gerador de temas (skins) para o GTK. Incluindo, com sua ajuda, você pode coletar esse tema no GTK2, que imitará o HiDPI. Ou encontre um tópico pronto .

Aplicações em Qt3, Gtk1, Motif


Tudo é muito complicado aqui. Existem dois hacks possíveis. Primeiro, você pode tirar proveito da capacidade do Kwin de aumentar a tela inteira. Configurações do sistema → Efeitos da área de trabalho → Efeitos da área de trabalho → Zoom . O botão do meio à esquerda são as configurações, incluindo as teclas para ligar e desligar. A segunda maneira é executar o aplicativo no servidor da área de trabalho remota e conectar-se localmente a ele. Vou apenas inserir um link para o script , porque configurá-lo é uma questão de um artigo separado.

Aplicações Java


Programas Java mais legais e comerciais se comportam como o Chrome: eles lêem DPI do X e o seguem. Programas -Dsun.java2d.uiScale=2 podem ser corrigidos com um dos dois argumentos: -Dsun.java2d.uiScale=2 aumenta a interface em 2 vezes e -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel diz a ela para usar as dimensões do GTK para desenhar . Deixe-me lembrá-lo que, em .xprofile, você pode criar a variável export _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel' . Este exemplo inclui anti-aliasing em fontes e GTK.

Bem, de alguma forma.

Source: https://habr.com/ru/post/pt403165/


All Articles