Resolução de tela de login incorreta


44

Na ocasião ímpar, geralmente após reiniciar incorretamente o computador, minha resolução de tela de login não é o padrão de 1440x900, mas acho que 1600x900. Agora, eu tenho esse monitor muito ruim para lidar com resoluções que não foram projetadas para lidar e mostrará uma caixa boba de "resolução incorreta" pulando pela tela.

Existe alguma maneira de fazer a tela de login carregar uma resolução de 1440x900, não importa o quê? Estou executando o Ubuntu 11.10 com Unity e LightDM.


Para mim, de todas as soluções, somente essa funcionou na 18.04 executando o lightdm: askubuntu.com/questions/507726/…
Takkat

Respostas:


40

Você pode criar um script para isso (fonte LightDM Resolution ).

  1. Primeiro, precisamos descobrir qual é o identificador do seu monitor. Abra um terminal, comece a digitar terminalseu traço de unidade para ver a opção ou pressione Ctrl+ Alt+T
  2. Digite / copie este comando para mostrar seus detalhes de exibição:

    xrandr -q
    

    Se você tiver apenas um monitor, verá uma linha na saída como a seguinte (provavelmente com alguns valores diferentes, é o identificador no início que estamos procurando):

    DVI-0 connected 1680x1050+0+0 (normal left inverted right x axis y axis) 473mm x 296mm
    

    O identificador de tela é DVI-0 neste caso

  3. Abra seu editor de texto favorito, vamos usar gedit neste exemplo, pressione Alt+ F2e digitegedit

  4. Digite / copie isso em:

    #!/bin/sh
    xrandr --output DVI-0 --primary --mode 1440x900
    

    Salve isso na sua área de trabalho como lightdmxrandr.sh

  5. Você pode testar o script antes de colocá-lo em prática. De volta ao terminal, navegue até onde acabamos de salvá-lo:

    cd ~/Desktop
    

    Agora precisamos torná-lo executável:

    chmod a+rx lightdmxrandr.sh
    

    Agora execute-o:

    ./lightdmxrandr.sh
    

    (Se sua tela for corrigida automaticamente após o login, você provavelmente não verá uma diferença; portanto, convém usar uma resolução de teste diferente, mas você sabe que funciona durante o teste)

  6. Agora vamos mover o pequeno script que criamos:

    sudo mv ~/Desktop/lightdmxrandr.sh /usr/share/.
    

    Se você não usar, sudopoderá receber um erro de permissão (eu uso esta pasta por preferência pessoal)

  7. Agora precisamos executar isso no lightdm, navegue para a pasta correta:

    cd /etc/lightdm
    
  8. Abra o arquivo conf lightdm:

    sudo gedit lightdm.conf
    
  9. Agora adicione a instrução para executar seu script após a última linha e salve:

    display-setup-script=/usr/share/lightdmxrandr.sh
    

Agora reinicie e isso deve definir a resolução correta na tela de logon do lightdm.

(essas instruções podem parecer longas, mas não demoram muito)


1
Obrigado! Eu uso o script de Leon mencionado abaixo. askubuntu.com/a/88882/28071
beanaroo

Esse é um bom roteiro, acho que vou guardá-lo para uso futuro!
12123

Infelizmente, isso apenas quebra as coisas no Ubuntu 13.04. Provavelmente porque eles estão fazendo algumas mudanças maciças no sistema operacional.
23413 Patrick

Também não funciona com o driver Ubuntu 13.10 + NVIDIA 319: o script é executado, mas a resolução não muda - provavelmente porque o driver NVIDIA o substitui.
Speakr

Eu acho que deveria ser chown root:roottambém?
Aquarius Power

38

Encontrei uma solução muito simples que funciona perfeitamente para mim executando o 13.04. ( atualização : agora 13.10) em um laptop com uma tela externa de 24 "que não está permanentemente conectada.

Vou copiar daqui

  1. Conecte-se
  2. use xrandr ou o utilitário de controle Displays para configurar seus monitores como você gostaria que eles fossem configurados na tela de login
  3. copie ~ / .config / monitors.xml para /var/lib/lightdm/.config

Como eu já tinha meus monitores configurados corretamente, apenas tive que executar a etapa 3.

Algumas outras respostas fornecidas aqui funcionaram para mim, mas apenas em um cenário específico, enquanto corria o risco de um sistema inutilizável em outros cenários (LOW GRAPHICS MODE ERROR). Por exemplo, com o monitor externo permanentemente conectado (resposta aceita por @captain_G) ou sempre com o mesmo dispositivo conectado à saída usada para o monitor externo (script por @Axlrod). Parece que a resposta do @ MarcoV é a solução mais genérica, mas ainda envolve regras de script.


4
Muito mais simples que as outras respostas ... Eu me pergunto por que não tem mais votos. Bem, tem o meu.
aap

Por outro lado, embora ajude a tela de login, seria bom se outros usuários não precisassem configurar a resolução da tela novamente.
aap

3
Em vez de copiar o arquivo, criar um link para ele a fim de que este é automaticamente actualizado sempre que você alterar as configurações de tela: $ sudo ln ~/.config/monitors.xml /var/lib/lightdm/.config/monitors.xml(Não, links simbólicos não funcionam.)
Nathan JB

3
Qual aplicativo grava / atualiza monitors.xml? Estou usando o XFCE e esse arquivo tem 2 anos e está completamente desatualizado. Não consigo encontrar um arquivo semelhante.
Scai

1
Essa é a abordagem correta, em vez de criar um script para alterar as resoluções. O .config / monitors.xml pode suportar a configuração de vários monitores (ou seja, sua configuração no trabalho com uma estação de acoplamento e 2 monitores versus sua instalação em casa sem estação de acoplamento e 1 monitor externo). Criar um script manual para definir a resolução seria relativamente mais complexo.
Iyad K

20

Você pode, em vez de criar script, adicionar ao arquivo /etc/lightdm/lightdm.confuma linha como esta:

display-setup-script=xrandr --output default --mode 1280x720

Antes de inserir, verifique se o comando funciona, pois com o comando errado, o lightdm não será iniciado.


Oi, seus xrandcomandos diz:warning: output default not found; ignoring
SebMa

@SebMa Você precisa usar o nome de saída correto!
Ken afiada

2

Para uma configuração de vários monitores em que você pode desconectar o laptop e usá-lo sem, aqui está uma solução simples:

corre:

xrandr

Os dispositivos que você está usando no laptop geralmente são LVDS1, e para mim eu tenho um DP2 (displayport 2) que pode ser HDMI1 ou qualquer outra coisa, basta encontrar os com resoluções listadas ao lado deles.

Crie este pequeno arquivo bash:

#!/bin/bash

mode="$(xrandr -q|grep -A1 "DP2 connected"| tail -1 |awk '{ print $1 }')"
if [ -n "$mode" ]; then
  xrandr --output LVDS1 --off
  xrandr --output DP2 --primary --mode 2540x1440
fi

Substitua o LVDS1 pela conexão do monitor do laptop.

Substitua DP2 pela sua conexão de monitor externo.

Coloque o script bash em / usr / bin / local /

chmod + x o script

editar /etc/lightdm/lightdm.conf

Adicionar, acrescentar

display-setup-script=/path/to/my/script

Reinicie.

A alteração da resolução só acontecerá quando você estiver realmente nessa tela agora.

Se você tiver vários locais com diferentes monitores / resoluções no mesmo conector, precisará colocar mais inteligência em seu script bash.


2

Um pouco melhorou o script de Axlrod acima .

Tudo o que você precisa fazer é especificar qual monitor usar primário e qual é a tela do seu laptop (LVDS).

#! / bin / bash
LVDS = "LVDS-0"
PRIMÁRIO = "VGA-0"

função get_displays ()
{
        xrandr -q | grep conectado | awk '{print $ 1}'
}

função get_resolution ()
{
        [[-z "$ 1"]] && return 0 || xrandr -q | grep -A1 $ 1 | cauda -1 | awk '{print $ 1}' | grep -e "^ [0-9]"
}

para exibição em $ (get_displays); Faz
        resolution = `get_resolution $ display`

        [[$ display == $ PRIMARY]] && arg = "- primário";
        [[-n $ resolução]] && mode = "- mode $ resolution";

        if [[$ display == $ LVDS]]; então
                xrandr --output $ display --off
        elif [[-n $ mode]]; então
                xrandr --output $ display $ arg $ mode
        fi
        resolução de arg no modo não configurado;
feito

1
sudo gedit /usr/share/X11/xorg.conf.d/52-myres.conf

depois no arquivo:

Section "Monitor"
    Identifier "VGA1"
    Option "PreferredMode" "1152x864"
EndSection

Salvar e sair. Os valores foram obtidos do comando xrandr -q. VGA1é o nome do meu conector e 1152x864é o nome da resolução.

Isso funciona para o Xubuntu 16.04. Ele define uma resolução preferida e, para mim, permite que eu defina a resolução da tela de login, em vez de defini-la como a resolução mais alta suportada.

Modificado a partir das respostas aqui


1
Após instalar o open-vm-tools e o open-vm-tools-desktop, copiar monitors.xml para /var/lib/lightdm/.config não funcionaria mais para mim. Especificar a resolução preferida como esta corrigiu para mim.
Jropella

1

O que eu achei útil foi um post no site do guia Ubuntu . Eu tentei muitas coisas no Ubuntu 11.10 e até tentei usar simplesmente o GNOME Classic. A resolução sempre foi 1024x768 e quando eu a defino manualmente para 1440x900, era "virtual", ou seja, tive que rolar com o mouse para explorar toda a área de trabalho que estava além das dimensões reais da tela.

No terminal, executei este comando:

sudo gedit /etc/default/grub

O editor de texto pode demorar um pouco para carregar. Depois de carregado, editei a linha

GRUB_GFXMODE=1024x768

e alterou para:

GRUB_GFXMODE=1440x900

Lembre-se de executar update-grubpara aplicar as alterações.

Depois disso, tentei reinstalar os drivers VESA (neste computador eu tenho uma GeForce 260 GTX). Sei que a melhor maneira é usar os drivers oficiais da Nvidia, mas usá-los o problema sempre foi o mesmo ... Claro, acho, agora o desempenho será pior.

Portanto, ao verificar o painel Configurações do servidor Nvidia X, verifiquei se minha resolução foi adicionada e, alternando para ela, a tela ficou com a aparência certa. Na verdade, estou usando o Ubuntu 11.10, mas no GNOME Classic.

Eu sou um novato no Linux, então espero ter escrito coisas decentes.


0

Não mexa com scripts ou arquivos de configuração que têm a possibilidade de tornar sua tela de login inutilizável!

Em vez disso, faça login e defina suas configurações de tela preferidas * e execute este comando:

sudo ln ~/.config/monitors.xml /var/lib/lightdm/.config/monitors.xml

Sua resolução de login agora sempre refletirá as configurações do usuário no qual você está conectado.

* Não se esqueça de clicar em "Aplicar"


Isso funciona, mas é secundário. Faz uma carga normal na resolução máxima e depois muda para as suas configurações. Como você pode carregar a resolução correta para iniciar?
Goddard

0

O script de Axelrod é um pouco defeituoso, pois um grep para 'conectado' também pega todos os displays 'desconectados' ... não o que queremos ...

Além disso, o uso de grep com awk e tail, etc ... é um desperdício tortuoso, e eu sugeriria o seguinte. Além disso, em get_resolution, alteramos o código de retorno para 1, pois um código de retorno zero é geralmente indicativo de falta de erros; portanto, usamos 1 se o primeiro parâmetro estiver ausente.

Concluindo, instanciando a parte principal do script em uma função, ela pode ser obtida e executada a qualquer momento, se necessário, em uma biblioteca de funções, além de obter o uso de variáveis ​​locais, que não precisam ser desabilitadas.

function get_displays()
{
    xrandr -q | awk '($2 == "connected") {print $1;}'
};

# the "\" and c/r were added for readability on this website
# I do not have them in my code variant that I use.
function get_resolution()
{
    [[ -z "$1" ]] && return 1;
    xrandr -q | \
    awk -v display="$1" '($1 == display && $2 == "connected") {getline; print $1;}';
};

function setup_displays()
{
    local   primary=${2:-"VGA-0"};
    local   lvds=${3:-"LVDS-0"};

    for display in $(get_displays);
    do
            local   resolution=${1:-"$(get_resolution $display)"};

            [[ $display == $primary ]] && local arg="--primary";
            [[ -n $resolution ]] && local mode="--mode $resolution";

            if [[ $display == $lvds ]];
            then
                    xrandr --output $display --off;
            elif [[ -n $mode ]];
            then
                    xrandr --output $display $arg $mode;
            fi;
    done;
};

setup_displays;

0

Foi assim que o fiz funcionar no Xubuntu 16.04.

Você precisa obter uma sequência de caracteres para a resolução desejada. Isso está dentro do resultado do comando:

xrandr --verbose

Agora escolha a peça com a resolução desejada. Será algo como:

1152x864 (0xa6) 108.000MHz +HSync +VSync
    h: width  1152 start 1216 end 1344 total 1600 skew    0 clock  67.50KHz
    v: height  864 start  865 end  868 total  900           clock  75.00Hz

A partir dos dados acima, você deve obter a string 108.000 1152 1216 1344 1600 864 865 868 900 +HSync +VSync.

Para encontrar o nome da sua saída, encontre uma linha semelhante também:

VGA1 connected 1152x864+0+0 (0xa4) normal (normal left inverted right x axis y axis) 306mm x 230mm

Aqui minha saída é nomeada VGA1.

Agora crie um script:

sudo gedit /usr/share/lightdmxrandr.sh

Em seguida, no arquivo, escreva o seguinte:

#!/bin/sh
xrandr --newmode "1152x864_75.00"  108.000  1152 1216 1344 1600  864 865 868 900 +HSync +VSync
xrandr --addmode VGA1 "1152x864_75.00"
xrandr --output VGA1 --mode 1152x864_75.00 --pos 0x0 --rotate normal

Salve e feche o arquivo. Tornar o script executável:

sudo chmod a+rx /usr/share/lightdmxrandr.sh

Crie um arquivo de configuração para chamar o script recém-criado.

sudo gedit /etc/lightdm/lightdm.conf.d/00-myres.conf

dentro deste arquivo, digite:

[Seat:*]
display-setup-script=/usr/share/lightdmxrandr.sh

Salve e feche o arquivo. Reinicie e esperamos que a resolução que você escolheu esteja no seu login.

Em termos práticos, essa é a única maneira que funcionou para mim, mesmo que recriar resoluções existentes não seja lógico.

Resposta modificada a partir desta pergunta .

Nota

Uma maneira alternativa de obter a cadeia de resolução longa é o programa cvt. Para obter uma sequência de caracteres para a resolução 1152x864, taxa de atualização 75.00:

cvt 1152 864 75

Isso me deu uma resolução ligeiramente diferente da resolução da minha área de trabalho e é por isso que não incluí o método na resposta principal.


0

Se você estiver usando o grek GTK do LightDM, poderá correr xrandr -qpara encontrar os nomes dos seus monitores, editar /etc/lightdm/lightdm-gtk-greetere definir a propriedade active-monitorconforme descrito nos comentários dentro desse arquivo. Essa propriedade pode receber vários valores ordenados, inclusive #cursorpara o monitor que atualmente mostra o cursor do mouse.


0

eu gosto de anexar meu script que configura os monitores para uma das teclas multimídia do meu teclado que eu não uso de outra forma. Atualmente, tenho o botão 'windows media center' forçar meus monitores a sua configuração preferida. Dessa forma, se você estiver voando às cegas e seus monitores não estiverem sincronizando com a resolução desejada, basta pressionar a tecla de atalho e tudo será corrigido.


-1

"Modos de tela preferidos" pode ser o problema

Presumo que o seu monitor reporte a alta resolução da tela como preferida. Agora você deseja substituir esta preferência padrão . Veja minha resposta a uma pergunta muito semelhante para obter detalhes sobre como isso pode ser feito.

Eu tive o problema oposto: sempre obtive uma resolução de tela menor (1280x1024) do que a desejada (1600x1200). A correção que eu encontrei (e descrevi na resposta vinculada), espero, será aplicável analogamente ao seu problema.


Quem votou negativamente na minha resposta, você poderia adicionar uma observação sobre por que você acha que essa resposta não é útil?
Chriki 04/10

-2

Eu tive o mesmo problema no meu MacBook Pro em meados de 2014 (11,1) executando o Xenial. Eu tentei todas as soluções mencionadas de várias formas, mas, invariavelmente, colocava o X no modo de gráficos baixos à prova de falhas (mas exibido na própria resolução que eu queria que fosse definida como padrão).

Depois de muita discussão sobre os fóruns e pesquisas no Google, aconteceu que eu havia esquecido a solução potencial mais simples e padrão: nomodeset. Isso resolveu o problema.

TL; DR: Não se esqueça de experimentar o nomodeset! Esp. em um MacbookPro 11,1.


-3

Eu criei esse script para torná-lo mais dinâmico (vários espaços de trabalho / monitores diferentes).

Apenas aborrecimento: quando você faz login no lightdm, a tela ainda pisca como se quisesse mudar a resolução: s


1
Colar não foi encontrado.
Tobold

De fato; se você ainda tiver uma cópia local do script, considere enviá-lo novamente.
wchargin

1
Carreguei o script no github. Eu não sei por que paste.ubuntu.com removido :(
Leon
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.