Não é possível automatizar com segurança as configurações do xrandr no Debian 7 no VirtualBox


23

Embora existam várias perguntas existentes sobre o assunto (das quais a resposta mais útil é essa ) e vários tópicos em outros fóruns, não posso definir minhas xrandrconfigurações de maneira confiável no Debian 7 no VirtualBox.

Estou tentando usar xrandrpara controlar minhas configurações de exibição (em vez de permitir que meu ambiente de área de trabalho as automatize) porque estou usando o i3gerenciador de janelas , que não automatiza as configurações de exibição ou usa as configurações de exibição do ambiente de área de trabalho Gnome.

Configuração:

Não tenho certeza do quanto isso é relevante, especialmente o material de hardware, pois não acho que o Debian possa acessar muitas informações sobre a configuração do monitor; Até onde eu sei, o VirtualBox apenas relata a existência de telas virtuais como se fossem monitores de hardware.

Hardware

  • Laptop Lenovo com gráficos nVidia (a GPU Intel integrada não é usada, AFAIK - há uma configuração de BIOS que eu usei para fazer isso)
    • Windows 7
    • 32GB RAM
    • Usando o driver nVidia mais recente (acho) (340.84) - isso pode importar, pois ativei a aceleração 3D no VirtualBox (veja abaixo), que acho que permite que o sistema operacional convidado tenha acesso ao hardware host
  • TV Seiki 4K (usada como monitor) via HDMI via docking station (que converte internamente o DisplayPort em HDMI)
  • O monitor Samsung SyncMaster 243T virou vertical

VirtualBox

  • Usando o VirtualBox 4.3.20
  • Adições de convidados (mesma versão) estão instaladas
  • Contagem de monitores: 2 (atribuído ao Seiki e ao SyncMaster no modo de tela cheia)
  • Memória de vídeo máxima (128 MB) usada
  • A aceleração 3D está ativada

Configurações de convidado

  • Debian 7 de 32 bits
  • gnomee gdm3estão instalados
  • WM preferido é i3

Comportamento:

Quando inicio i3e consulta xrandr, as configurações de exibição padrão sempre parecem idênticas entre VBOX0e VBOX1os dois "monitores" aos quais o VirtualBox se reporta xrandr(pelo menos, é assim que eu entendo; pode estar faltando alguma coisa). Observe que, até onde eu sei, não há uma boa maneira de saber qual VBOX # é qual monitor com falta de tentativa e erro.

Normalmente, isso inclui uma resolução razoável (se um pouco abaixo do nativo) para o meu SyncMaster vertical, mas nenhuma resolução 4K para o Seiki. A opção "redimensionar automaticamente a exibição do convidado" no VirtualBox não parece afetar xrandr.

Eu tentei várias modificações do script descrito na resposta vinculada acima , mas, em geral, pareço receber vários xrandrerros. Não encontrei muitas correlações entre as várias coisas que tentei e os erros que obtive, mas aqui estão as principais coisas que podem ser importantes:

Ajustes de script

  • (Geralmente) pulando as VBoxServiceetapas de reinicialização (elas parecem não mudar o xrandrcomportamento)
  • Use a xrandr --fbopção antes de qualquer outro xrandrcomando; isso às vezes resulta no erro "a tela especificada não é grande o suficiente" listada abaixo
  • Use 30 fps em vez de 60 (4K via atual HDMI é 30fps max, mas eu não acho que isso deveria importar dentro VirtualBox, em qualquer caso, eu acho que eu às vezes tinha que trabalhar e às vezes tinha que falhar em ambos os sentidos)
  • Use em cvtvez de gtf(eles parecem se comportar essencialmente da mesma maneira)
  • Substitua o primeiro número fornecido por gtf(que geralmente é cerca de 200 ou 300) por um número menor, como 100.00(acho que funcionou uma ou duas vezes na linha de comando, mas geralmente não parece fazer a diferença)
  • Randomize novos nomes de modo usando $RANDOM(eu também tentei vários outros meios de mexer com nomes)
  • --rmmodeModos explicitamente antes de criá-los usando --newmode(isso parece impedir o erro "fonte" listado abaixo)
  • Use --right-ofou --left-ofao definir --outputs (já que as telas geralmente são espelhadas por padrão)

Mensagens de erro

  • xrandr: specified screen 5120x2160 not large enough for output VBOX0 (3840x2160+3840+0) X Error of failed request: BadValue (integer parameter out of range for operation) Eu peguei esse agora, quando reexecutar o script depois que os monitores já foram coagidos para sua resolução adequada (usando a solução alternativa descrita na próxima seção). Isso me surpreendeu, porque xrandrrelata o seguinte: Screen 0: minimum 64 x 64, current 5120 x 2160, maximum 16384 x 16384
  • X Error of failed request: BadMatch (invalid parameter attributes) Às vezes, isso ocorre ao tentar fazer a --newmode. É provavelmente o segundo motivo mais comum para o script falhar. Eu acho que ele pode ser causado por xrandr"lembrar" o nome do modo de uma tentativa anterior para configurá-lo, mas usando $RANDOMque não aparecem para resolver de forma consistente o problema, por isso pode ser algum outro problema. (Suponho que seja possível que mesmo com $RANDOMcolisões de nomes.) Eu não vi esse erro desde que comecei a usar --rmmode, mas não executei o script várias vezes desde a adição desse comando para ter certeza de que ele fez diferença. o comportamento.
  • X Error of failed request: BadMatch (invalid parameter attributes) Às vezes, isso ocorre ao tentar fazer um --addmode. É provavelmente o motivo mais comum para o script falhar, e isso me deixa intrigado. Às vezes, a execução manual (ou seja, em um terminal) da mesma seqüência de comandos usada pelo script parece ser uma solução viável para esse erro, o que é bizarro.

Solução alternativa do Gnome:

Descobri que, se eu fizer login na área de trabalho do Gnome, execute a função "Auto-redimensionar exibição de convidado" do VirtualBox e efetue logoff e logon novamente i3, xrandrnormalmente incluem as resoluções corretas para o Seiki e o SyncMaster em seus arquivos gerados automaticamente lista de modos e a resolução 4K é definida como a resolução "preferida" para cada tela VBOX. Isso me permite simplesmente usar xrandr --output [4K VBOX] --auto --left-of [SyncMaster VBOX], seguido de xrandr --output [SyncMaster VBOX] --mode [SyncMaster resolution](observe que a resolução do SyncMaster ainda deve ser especificada manualmente, uma vez que xrandrrelata a mesma resolução preferida para ambos VBOX# sem considerar a verdade ou a sanidade).

Essa solução alternativa, uma vez executada, aparentemente persiste entre desligamentos e reinicializações (ou seja, os modos desejados ainda estão presentes na xrandrlista de modos, embora eu ainda precise executar os dois xrandrcomandos após iniciar uma i3sessão), mas nem sempre persiste quando simplesmente saindo e iniciando uma nova i3sessão. Observe que a gdm3tela de login nunca tem a resolução correta (tanto quanto eu vi). Não tenho mais comentários sobre a estranheza acontecendo aqui.

EDIT: Essa abordagem não parece ser programável, e o comportamento, na verdade, não parece consistente.

Outras notas:

  • Eu não tenho um xconfarquivo (ou similar) no meu etc/X11diretório.
  • A correção dos monitores é um problema bastante comum, porque sempre que eu desligo um dos meus monitores, o VirtualBox mata um dos monitores virtuais em tela cheia. (Urgh.)

Questões:

  • Existe alguma maneira de distinguir programaticamente entre os recursos reais de hardware (ou seja, resoluções nativas) de diferentes monitores no VirtualBox?
  • Por que estou vendo esses vários erros? O que está acontecendo xrandr, etc?
  • Existe alguma maneira de obter com segurança a resolução certa de tela cheia sem exigir que eu inicie uma gnomesessão antes da minha i3sessão?

Possivelmente questões relacionadas

  • O ponteiro do mouse não está alinhado corretamente com o local onde os cliques parecem ser detectados; os cliques geralmente ocorrem abaixo e à direita do ponteiro. Depois que as telas são configuradas corretamente, esse problema geralmente desaparece, embora atualmente as telas tenham as resoluções corretas, mas o ponteiro ainda esteja um pouco desligado.
  • Quando consigo obter as resoluções corretas, a tela ocasionalmente pisca. Isso é chato, mas habitável. Alguma idéia do que a causa ou se pode ser corrigida?

Vou precisar desenterrar minhas anotações, mas quais são os modos suportados pelos seus monitores? O i3 tem alguma maneira de iniciar um script antes / logo após o login? superuser.com/questions/808737/… é o que acabei fazendo com um problema físico semelhante, mas isso pode precisar de alguns recursos para funcionar no seu caso.
Journeyman Geek

@JourneymanGeek O 4K tem suporte para a maioria dos modos padrão em 60 hz e suporte para modos maiores (incluindo 4K) a 30 hz. O SyncMaster parece suportar a maioria dos modos normais, com uma resolução nativa (vertical) de 1920x1280. O script de configuração do i3 suporta a execução de um script no login; Estou usando esse recurso para executar automaticamente o script descrito acima, que se parece com o seu, mas continuo recebendo xrandrerros estranhos .
Kyle Strand

Como você lança o i3? Ele possui sua própria rotina de inicialização X? Ou você o solta .xinitrce usa startx? Eu uso o xmonad (que, pelo que entendi, é semelhante ao i3?) Que inicio usando startx. Meu xrandrscript é todo feito .xinitlogo antes do meu gerenciador de janelas ser iniciado. Eu tive excelentes resultados dessa maneira. X está pronto para começar, e nada mais foi lançado para interferir.
Chris

Eu uso gdm3e i3selecionei como o ambiente de área de trabalho padrão para minha conta.
Kyle Strand

1
Infelizmente, nada que eu possa pensar imediatamente, já que o VBox não parece atribuir nomes constantemente aos monitores. Você poderia postar a saída de xrandr --query(a) quando estiver detectando as configurações incorretamente e (b) depois de ter conseguido tudo funcionar corretamente? Ou pelo menos um de tudo funcionando corretamente.
Chris

Respostas:


0

A atualização para a versão mais recente do VirtualBox, 5.0.14, parece ter resolvido o problema.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.