Escala aplicativo de forma diferente em diferentes monitores - Ubuntu 16.04

5

Encontrei muitos artigos / respostas muito sólidos sobre este tópico: link

link

link

E claro:

link link

No entanto, ainda estou lutando. Meu laptop é o Dell XPS15. Sua exibição é de 3840x2160. Eu tentei monitores externos diferentes, mas no momento o que eu uso é também Dell com resolução 1920x1080.

Quando eu conecto o monitor externo, alguns dos painéis ficam imediatamente muito pequenos na tela de 3840x2160. Quando eu tento aumentar a exibição embutida, as escalas de cromo, minhas escalas de IDE, mas exibe a janela junto com outras janelas como as configurações do NVIDIA X Server ficam muito pequenas. Tentei jogar com Redimensionar todo o conteúdo da janela para corresponder em Exibição , mas sem sucesso. É muito grande na tela externa ou pequena no build-in. Eu também tentei xrandr com escala param, mas isso me dá:

xrandr --output HDMI-1 --scale 2x2
X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  140 (RANDR)
  Minor opcode of failed request:  26 (RRSetCrtcTransform)
  Value in failed request:  0x40
  Serial number of failed request:  38
  Current serial number in output stream:  39

Idealmente, quero várias janelas do mesmo aplicativo (digamos que o Chrome ou o Intellij Idea estejam abertos em exibições diferentes e sejam escalonados independentemente deles).

EDITAR: Eu não estou procurando Escala para menus e barra de título , eu gosto do jeito que as barras são. Eu quero o conteúdo do Windows dimensionado de forma independente. Exibe a interface do usuário me obriga a escalar todas as janelas para corresponder à exibição do Built-id ou ao monitor externo. Como resultado:

1) Redimensione todo o conteúdo da janela para corresponder ao Display Integrado:

Exibição embutida - tudo parece perfeito; Display Externo - tudo é enorme.

2) Redimensione todo o conteúdo da janela para corresponder Exibição externa:

Exibição embutida - muito pequena; Display Externo - tudo parece perfeito.

    
por yuranos87 06.11.2016 / 18:07

1 resposta

2

Eu tenho driver nvidia 340.98 com GT218M [NVS 3100M], Xubuntu 16.04, quaisquer resultados abaixo são deste ambiente se eu não mencionar o contrário. Aqui está minhas informações do ambiente de teste , a saída de:

sudo apt-get install pastebinit; \
sudo sh -c "lsb_release -sd; \
 dmidecode -s system-product-name; echo ==; \
 lshw -c display; echo ==; \
 xrandr --verbose; echo ==; \
 cat /etx/X11/xorg.conf" \
 | tee ~/Desktop/ubuntu-graphic-info.txt \
 | pastebinit

Pilha estranha e complexa para depurar especialmente usando drivers proprietários. Na maioria das vezes, recebo comportamentos inesperados, pode ser devido à falta de conhecimento sobre a configuração atual da pilha gráfica do Linux.

  • Eu escrevi esta resposta antes, o que pode introduzir algumas ferramentas de depuração como xtrace
  • Evite executar vários comandos xrandr sequenciais, somente após a reinicialização do servidor X. O mesmo comando pode ter resultado diferente dependendo dos comandos anteriores. Tenho notado que, com --scale (veja o caso de teste da minha resposta, vinculado acima) --transform & amp; %código%. Ainda não conheço uma maneira fácil apenas por logout / login. Então, sempre faça o logout / login antes de fazer outra avaliação.
  • As capturas de tela tiram apenas imagens em tamanho de pixel do FB, então adicionarei fotos da câmera para mostrar os resultados reais.

Método 1: --fb ou xrandr --output .. --scale HCoefxVCoef

Nota, funciona bem para mim. --scale-from WxH é um atalho para --scale , consulte method3

(VGA-0 abaixo do DP-3)

xrandr \
--output DP-3 --mode 1280x800 --scale 1x1 --pos 0x0 --fb 2880x2600 \
--output VGA-0 --mode 1440x900 --scale 2x2 --pos 0x800

ou:

xrandr \
--output DP-3 --mode 1280x800 --pos 0x0 --fb 2880x2600 \
--output VGA-0 --mode 1440x900 --scale-from 2880x1800 --pos 0x800

Cálculo do tamanho do FrameBuffer:

width = max(1280,1440*2) = 2880
height = 800+900*2 = 2600

Resultados:

  • captura de tela nvidia xrandr scale

  • nvidia xrandr scale photo

Método 2: --transform Ver entrada / saída de porta

Nota: não funciona bem. nvidia-settings não altera o buffer de quadros para o tamanho requerido como no comando nvidia-settings . Parece que um bug (tipo, xrandr tem seu próprio FB), precisa de mais pesquisas.

Tentou replicar nvidia setup diretamente usando xrandr (usei xrandr do method1, marquei nvidia, redefino as configurações e usei nvidia-settings diretamente):

  1. nvidia-settings → Configuração de exibição do X Server
  2. Selecionar monitor externo → avançado ...
  3. Crie ViewPortIn & amp; Panning duplo de ViewPortOut (que é o mesmo que a resolução original)
  4. Deixar o monitor interno inalterado e, em seguida, Aplicar

Exemplo:

Resultados: Observe o ponteiro do mouse, ele pode alcançar todas as bordas do segundo monitor, mesmo que ele apenas desenhe o quadrante superior esquerdo.

  • captura de tela nvidia-settings viewportin

  • nvidia-settings viewportin photo

Atualização: Bem, finalmente consegui um truque de solução. Adicione 1 px à largura ou altura do panning ( gksu nvidia-settings )

    Panning:     2881x1800 or 2880x1801

Novos Resultados: Eu não posso explicar isso, apenas o fundo está corrompido se eu uso abaixo, caso contrário, tudo parece ok.

  • nvidia-settings viewportin com captura de tela de truque

    reduziu a qualidade de cor da imagem acima para reduzir o imgur em menos de 2 MB

  • nvidia - viewportin com panning trick photo

Método 3: Panning

Nota, funciona bem para mim, igual ao método1

(VGA-0 à direita do DP-3)

xrandr \
--output DP-3  -primary --mode 1280x800 --pos 0x0 --transform "1,0,0,0,1,0,0,0,1" --fb 4160x1800 \
--output VGA-0 --mode 1440x900 --transform "2,0,0,0,2,0,0,0,1" --right-of DP-3

Cálculo do tamanho do FrameBuffer:

width = 1280+1440*2 = 4160
height = max(800,900*2) = 1800

Resultados:

  • nvidia xrandr transform screenshot

  • nvidia xrandr transform photo

por user.dz 03.01.2017 / 12:48