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 xrandr
configurações de maneira confiável no Debian 7 no VirtualBox.
Estou tentando usar xrandr
para controlar minhas configurações de exibição (em vez de permitir que meu ambiente de área de trabalho as automatize) porque estou usando o i3
gerenciador 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
gnome
egdm3
estão instalados- WM preferido é
i3
Comportamento:
Quando inicio i3
e consulta xrandr
, as configurações de exibição padrão sempre parecem idênticas entre VBOX0
e VBOX1
os 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 xrandr
erros. 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
VBoxService
etapas de reinicialização (elas parecem não mudar oxrandr
comportamento) - Use a
xrandr --fb
opção antes de qualquer outroxrandr
comando; 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
cvt
vez degtf
(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, como100.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) --rmmode
Modos explicitamente antes de criá-los usando--newmode
(isso parece impedir o erro "fonte" listado abaixo)- Use
--right-of
ou--left-of
ao definir--output
s (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, porquexrandr
relata 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 porxrandr
"lembrar" o nome do modo de uma tentativa anterior para configurá-lo, mas usando$RANDOM
que 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$RANDOM
colisõ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
, xrandr
normalmente 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 xrandr
relata 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 xrandr
lista de modos, embora eu ainda precise executar os dois xrandr
comandos após iniciar uma i3
sessão), mas nem sempre persiste quando simplesmente saindo e iniciando uma nova i3
sessão. Observe que a gdm3
tela 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
xconf
arquivo (ou similar) no meuetc/X11
diretó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
gnome
sessão antes da minhai3
sessã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?
xrandr
erros estranhos .
.xinitrc
e usa startx
? Eu uso o xmonad (que, pelo que entendi, é semelhante ao i3?) Que inicio usando startx
. Meu xrandr
script é todo feito .xinit
logo 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.
gdm3
e i3
selecionei como o ambiente de área de trabalho padrão para minha conta.
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.