É possível ter configurações diferentes de DPI para duas telas diferentes?

123

Estou usando o Ubuntu 12.04.3 com drivers NVidia (319) para minha placa gráfica Quadro K2100M e, quando alterno minha tela principal do laptop 3200x1800 para o modo 1920x1080 (usando nvidia-settings), a tela fica embaçada ...

Estou usando duas telas:

  • Minha tela principal é um LCD com resolução máxima de 1920x1200.
  • A tela do meu laptop (resolução original de 3200x1800) está à direita disso.

O principal problema é que, no Ubuntu, a fonte é muito pequena na tela do meu laptop. Por causa disso, eu queria mudar a resolução do meu laptop para 1920x1080.

Lendo a resposta de Galgalesh , tentei calcular meu DPI e aqui está a configuração de DPI que eu deveria ter:

  • 94x94 para minha tela LCD principal 1920x1200
  • 235x236 para a tela do meu laptop 3200x1800

Existe uma maneira de ter duas resoluções de DPI com uma área de trabalho estendida?

Anthony O.
fonte
3
Bem, dirigir qualquer tela de LCD em uma resolução não nativa parecerá embaçado. Isso ocorre porque a maneira como os pixels são dispostos de maneira fixa e o sinal não corresponde a isso. O que exatamente você espera que aconteça? Desativando o dimensionamento, talvez? Mas é exibido apenas no meio da tela e não em tela cheia. Para uma exibição ideal, mantenha sempre sua exibição na resolução de tela nativa. Eu não acho que isso tenha algo a ver com o Ubuntu.
gertvdijk
2
@gertvdijk: Então você tem como manter os dois monitores na resolução de tela nativa? Eu acho que é isso que Anthony está perguntando.
beldaz
2
@beldaz Minha resposta foi à revisão 1 da pergunta . Não mencionou nada relacionado à configuração de tela dupla na época. Como a pergunta foi alterada significativamente, isso levanta as sobrancelhas de todas as postagens alteradas após essa data. Basicamente, invalida qualquer coisa contribuída e realmente diminui minha motivação para ajudar. Os usuários devem fazer uma nova pergunta, na minha opinião.
Gtvdijk
@gertvdijk Desculpe, faz sentido agora.
beldaz
Gostaria de saber se a possibilidade de usar o Wayland no mais novo Ubuntu torna isso mais fácil de resolver.
mkataja

Respostas:

120

Parece que as pessoas ainda estão lutando para trabalhar com vários monitores e monitores HiDPI. Uma boa solução alternativa é descrita no wiki do arco https://wiki.archlinux.org/index.php/HiDPI#Multiple_displays . Então eu tenho:

  • laptop asus ln303ux: 3200x1800,
  • monitor externo: 1920x1200

Agora eu uso o Ubuntu 14.10 e o GNOME Shell 3.12.2 que possuem suporte HiDPI bastante útil. Então, eu apenas uso o suporte pronto para uso do HiDPI - o fator de escala é 2 (pode ser configurado via GUI). Isso significa que no monitor externo recebo tudo duas vezes maior que o aceitável. Assim, eu uso xrandr; mas, em vez de diminuir a escala da tela do laptop, aprimoro a tela do monitor externo:

xrandr --output HDMI1 --scale 2x2 --mode 1920x1200 --fb 3840x4200 --pos 0x0
xrandr --output eDP1 --scale 1x1 --pos 320x2400

Então, um por um:

  1. --output HDMI1no meu caso é a tela externa, eDP1é a tela do laptop.
  2. --scale 2x2 - faça tudo na tela externa duas vezes menor
  3. --mode XxY - defina explicitamente a resolução para a tela (não é necessário se já estiver definido)
  4. --fb XxY- defina o tamanho de uma tela virtual (framebuffer) ( importante sem isso, você poderá usar apenas uma quarta parte da tela). No meu caso, uma tela estava em cima de outra, então adicionei alturas efetivas 2400 + 1800 = 4200. Observe também que o tamanho máximo do buffer de quadros pode ser especificado no xorg.conf - então você não pode exceder (ele está escrito na primeira linha de xrandr -qsaída).
  5. --pos XxY- no meu caso, defino o posicionamento absoluto das telas, para que a tela do meu laptop fique diretamente na parte inferior da tela externa. O valor Y aqui é o dobro da altura do monitor externo.

E é isso aí! Tudo é tão nítido quanto poderia ser.

FYI: para obter os nomes das telas e as resoluções disponíveis, é possível executar xrandr --current. Mais informações sobre como definir a resolução podem ser encontradas aqui: https://wiki.ubuntu.com/X/Config/Resolution .

ATUALIZAÇÃO - OPÇÃO 2: mais uma solução interessante para aplicativos compatíveis com GTK3. Se eu normalmente uso apenas um aplicativo na tela grande (por exemplo, alguns IDE, como leksah), não redimensiono a tela, mas executo o aplicativo na escala original.

env GDK_SCALE=0.5 GDK_DPI_SCALE=0.5 CLUTTER_SCALE=0.5 appname
artem
fonte
7
tem um error of failed request: BadValue (integer parameter out of range for operation):-(
Juh_
4
A --fbopção não parece permitir que mais de um quarto da 2x2tela (cursor do mouse não pode ser movido quadrante superior esquerdo passado)
EoghanM
2
O dimensionamento funciona, mas você não perde o HiDPI? Tudo parece escalado e embaçado.
Andy
8
Por um lado a configuração lado com um monitor externo 1920x1080 sentado à esquerda do meu 3200x1800 laptop HiDPI:xrandr --output eDP1 --scale 1x1 --pos 3840x0 ; xrandr --output HDMI1 --scale 2x2 --mode 1920x1080 --fb 7680x2160 --pos 0x0
Daniel Bower
2
O parâmetro --fb é 2 * Monitor + laptop tela externa
Brian C.
10

Por que está embaçado?

Sua tela sempre exibe 3200x1800 pixels. Se você abaixar a resolução da tela no seu computador, isso significa que sua tela deve ser dimensionada para se ajustar à sua tela. Dependendo da proporção entre a resolução nativa e a atual, essa escala produzirá uma imagem tremida.

Você pode encontrar mais informações sobre dimensionamento e resolução nativa aqui: https://en.wikipedia.org/wiki/Native_resolution

Como posso aumentar o texto?

Se o texto for muito pequeno, você tem duas opções:

1. Altere o tamanho da fonte do Ubuntu

Como altero as fontes e ajusto o tamanho?

2. Altere o DPI (aumentará a interface inteira, não apenas o texto)

Como encontrar e alterar o DPI da tela? (resposta de @whtyger)

Galgalesh
fonte
1
Apenas como uma observação sobre o aumento do tamanho da fonte. Em vez disso, aumente o DPI para que toda a interface do usuário seja dimensionada. Isso deve ser reconhecido corretamente automaticamente (lendo o EDID do seu monitor), mas se isso falhar: Como encontrar e alterar o DPI da tela?
gertvdijk
23
Na verdade, isso não é uma resposta para minha pergunta. Estou usando duas telas diferentes com resoluções diferentes . Eu fiz o cálculo: minha tela LCD principal esquerda deve ter resolução de 94x94 DPI, enquanto minha tela direita do laptop deve ter 235x235 DPI ... E não encontro nenhuma maneira de definir duas resoluções de DPI diferentes, exceto configurando a nvidia para executar 2 separou o X e não consigo passar uma janela da esquerda para a direita ... O Windows é muito melhor para resolver esse problema :(
Anthony O.
9
-1 para ignorar completamente o ponto de questão
Martin Konecny
8
@AnthonyO. Por favor, não altere sua pergunta consideravelmente depois que uma resposta foi publicada, da qual você não gosta. No momento em que essa resposta foi publicada, você não mencionou nada relacionado a uma configuração de tela dupla (consulte a revisão 1 ). Alterar sua pergunta invalida qualquer coisa já postada e você não deve fazer isso. Em vez disso, reverta as edições da pergunta e publique uma nova pergunta.
Gtvdijk
5
@MartinKonecny ​​O entrevistador original editou substancialmente sua pergunta, esta resposta responde à pergunta original, verifique as revisões.
Jamie Kitson
7

Eu usei a solução do artmem, mas encontrei o problema do mouse mencionado pelo EoghanM. A solução alternativa que encontrei no antigo relatório de bug ao qual ele vinculava estava relacionada ao --panning.

Estou filmando para: - DP1-2 3840x2160 em DIP nativo. - eDP1 1366x768, dimensionado para parecer razoável à direita do DP1-2.

Eu consegui que isso acontecesse com um buffer de quadro que é como DP1-2 + (2x eDP1);

Isso deve ser simples, mas o xrandr é um pouco complicado.

Aqui --scale é usado para reduzir tudo em eDP1 em 1/2. --panning é o mesmo que eDP1 no buffer de quadro original, com a posição (+ 3840 + 0) logo à direita do DP1-2. + 0 + 2160 estaria abaixo dele.

xrandr -d :0 --fb 6572x3696 --output DP1-2 --mode 3840x2160 --scale 1x1 --rate 60 --pos 0x0 --primary

# sometimes panning get applied incorrectly when switching from some other mode, running it twice is a work around
xrandr -d :0 --output eDP1 --off
xrandr -d :0 --fb 6572x3696 --output eDP1  --mode 1366x768  --scale 2x2 --panning 2732x1536+3840+0
xrandr -d :0 --fb 6572x3696 --output eDP1  --mode 1366x768  --scale 2x2 --panning 2732x1536+3840+0

Também defino Xft.dpi como 185

$ cat ~/.Xresources
Xft.dpi: 185

Quando desconecto do monitor externo, corro:

xrandr -d :0 --output DP1-2 --off
xrandr -d :0 --fb 2732x1536 --output eDP1  --mode 1366x768  --scale 2x2 --panning 2732x1536+0+0 --pos 0x0 --primary

Isso não parece ótimo, mas não estou muito longe da minha mesa. Você pode contornar isso alterando o Xft.dpi e reiniciando todos os seus programas da área de trabalho. Não conheço uma maneira de alterar o Xft.dpi e fazer com que os clientes o usem sem reiniciá-los.

Brian C.
fonte
O movimento panorâmico foi a peça final do quebra-cabeça - resolveu o cursor preso em um quarto da edição da tela. Obrigado @Brian!
Rtindru 26/04
2
"executando duas vezes" ???? pixel sagrado, ele funciona (eu já estava aplicando o pan, mas é aplicado corretamente apenas se eu executar o mesmo comando duas vezes).
Riccardo Galli
Sim, eu notei que estava funcionando todas as vezes que o rodava, então pensei em tentar duas vezes e, bem, aqui estamos.
Brian C.
Tudo bem, então isso não funciona com o kernel 4.5.2. Instalei exatamente esse kernel para lidar com um problema relacionado ao docker na 4.5.1 e agora o script acima me deixa com uma tela preta. Para corrigir isso no 4.5.2, eu primeiro faço os comandos eDP1 sem o --off e depois o comando DP1-2.
101317 Brian C.
1
Finalmente trabalhou com panning! Ainda tenho um mouse e uma tela com falhas (desde que comecei a usar o xrandr). Qualquer ideia?
hsandt
4

Consegui resolver isso (com problemas) usando os detalhes descritos na seguinte discussão no github: https://github.com/linuxmint/Cinnamon/issues/3606

Monitor externo QHD (2560X1440), monitor interno / laptop 3200x1800

xrandr --output eDP-1 --scale 1x1 --pos 0x2880
xrandr --output DP-1 --mode 2560x1440 --scale 2x2 --fb 5120x4680

OU

Monitor externo FHD (1920x1080), monitor interno / laptop 3200x1800

xrandr --output eDP-1 --scale 1x1 --pos 0x2160
xrandr --output DP-1 --mode 1920x1080 --scale 2x2 --fb 3840x3960

Isso funciona, mas há uma quantidade significativa de rasgo no monitor de alta resolução (laptop) quando movo janelas, redimensiono telas ou navego em um navegador. Parece uma solução de renderização de software (que tem todos esses problemas de rasgar e atualizações lentas).

Em 2017, o Linux / Gnome precisa abordar a solução de dimensionamento misto para vários monitores. Tanto o Windows 10 quanto o OS X resolveram isso sem ter que recorrer a correções de band-aid da linha de comando que funcionam parcialmente (o problema de laceração não é aceitável para jogos)

Jeets
fonte
1
Esta é uma nova resposta ou você está tentando relatar um erro?
user68186
É uma elaboração de uma resposta existente, com mais opções que se pode aproveitar. A resposta fornecida pelo @artem acima explica como essas configurações funcionam. Eu simplesmente tentei fornecer duas opções que podem ser usadas como as pessoas que têm um monitor externo QHD ou FHD e um monitor primário / monitor 4K de laptop. O bug está no rasgo que você vê com esta solução. Isso é inerente a essa abordagem.
Jeets
2
Com a proliferação de configurações de 4k e de várias resoluções, concordo com o parágrafo final que precisa ser resolvido. Não era tão ruim antes, mas agora está simplesmente destruindo minha configuração em um monitor agora que tenho um 4K. Espero que o Ubuntu 18 LTS eles tenham isso corrigido.
Neuronet
3
É 2018 ... ainda o mesmo sh1t :)
Stefanos Kalantzis
Wayland funciona muito bem para isso. Exceto que isso é apenas para isso ... Também tive uma boa experiência com o wayland + kde, melhor que o gnome + wayland. Estou de volta ao X devido à falta de suporte para alguns softwares que são executados apenas no X e a problemas de estabilidade. 2018 ...
Victor
4

Essas respostas são ótimas e me ajudaram anteriormente, mas uma recente

sudo apt-get upgrade 

apaguei meu randr-config! Ao tentar restaurar minhas configurações, descobri que não era mais possível passar o mouse além do quadrante 1/4 da segunda tela, independentemente da entrada --fb. Em https://wiki.archlinux.org/index.php/HiDPI#Side_display, eu finalmente descobri que adicionar panning fazia o truque. Além disso, o uso de '--direito de' ou '- esquerda de' é mais simples que '--pos'.

"Geralmente, se o seu monitor HiDPI (laptop) tem pixels AxB e seu monitor comum (externo) é CxD e você está escalando por [ExF], a linha de comando para a direita é:"

xrandr --output eDP-1 --auto --output HDMI-1 --auto --panning [C*E]x[D*F]+[A]+0 --scale [E]x[F] --right-of eDP-1
ONECore
fonte
Isso é interessante e, definitivamente, parece que poderia ser útil para alguém, embora não tenha certeza de que isso pertença como resposta a esta pergunta. Talvez você deva abrir e responder sua própria pergunta? Não tenho certeza.
Hee Jin
1
@ Emily: Eu acho que esta resposta pertence aqui. Usei a resposta de artem hoje e tive o problema exato que o ONECore declarou (apenas o quadrante superior esquerdo da tela era utilizável pelo mouse). Felizmente, vi essa resposta e o pan trabalhou instantaneamente.
BrainCore 16/05
Sim, desculpe, eu queria que fosse uma resposta à resposta de @ artem, mas o Stackexchange é super incrível e não me permite responder até receber 50 pontos de brownie.
ONECore
Observe também que isso não parece persistente; portanto, a menos que você o adicione ao xorg.conf, ele desaparece a cada reinicialização. Mas se você adicioná-lo lá, força essa configuração, não importa o que aconteça (às vezes eu não conecto o monitor). Por isso, acho super fácil criar um shell e executá-lo quando quiser. Simplesmente adicione o código acima a um arquivo de texto terminado em .sh (como resolution.sh) e, em seguida, torne-o executável com "chmod 0700 resolution.sh" no terminal.
ONECore
Muito obrigado por compartilhar sua experiência também @BrainCore!
Hee Jin
1

Eu tenho um monitor desatualizado de 1024x768, conectado a um notebook (menos desatualizado).
As janelas são renderizadas em tamanhos bastante diferentes, muito maiores no monitor externo (que possui um ponto maior e mais antigo).
Encontrei um comando para dimensionar o monitor:

xrandr --output VGA-1 --scale 1.5x1.5

VGA-1 é o nome interno do monitor, encontrado executando o seguinte comando:

xrandr --current | grep connected

O efeito é que agora o monitor antigo exibe seu conteúdo quase do mesmo tamanho do notebook.

Curiosamente, ele funciona com escala de 1,5x, mas não 1,45, a tela (no meu caso) fica preta.

Quando executei o comentário da balança na primeira vez, o resultado foi assustador, porque o conteúdo das duas telas se sobrepôs. Por exemplo, o ponteiro do cursor apareceu duas vezes.

Eu executei um programa:

arandr &

para definir as posições relativas da tela para corrigi-lo.
Funciona como a configuração Configurações> Dispositivos> Monitores .

Eu instalei com:

sudo apt-get install arandr

Obrigado @LuisAlvarado e outros por compartilhar seu conhecimento!

Juan Lanus
fonte
Isso funciona temporariamente para mim, mas não permanece se eu reiniciar. Acho que preciso encontrar um script para fazer o que arandrestá fazendo aqui e depois colocar tudo no bashrc ou algo assim. Obrigado!
Max von Hippel
O arandr pode exportar um arquivo de configuração. Defino o arquivo na minha área de trabalho e o alimentei com arandr a cada reinicialização. Não desenvolvi um script e agora tenho um monitor e não uso mais o arandr.
Juan Lanus
0

Primeira execução $xrandrpara exibir todas as saídas

Screen 0: minimum 320 x 200, current 7680 x 2160, maximum 8192 x 8192
eDP-1 connected primary 3840x2160+0+0 (normal left inverted right x axis y axis) 344mm x 194mm
   3840x2160     60.00*+  59.98    59.97  
   3200x1800     59.96    59.94  
   2880x1620     59.96    59.97   
DP-1 disconnected (normal left inverted right x axis y axis)
DP-2 disconnected (normal left inverted right x axis y axis)
DP-3 connected 3840x2160+3840+0 (normal left inverted right x axis y axis) 521mm x 294mm
   1920x1080     60.00*+  50.00    59.94  
   1920x1080i    60.00    50.00    59.94  
   1680x1050     59.88  
   1280x1024     75.02    60.02

Como você pode ver neste caso, o segundo monitor está conectado. DP-3 Em seguida, você pode revender a tela: $xrandr --output DP-3 --auto --scale 2x2

Abdelhak
fonte