Risoluzione schermo di accesso errata


44

Nella strana occasione, di solito dopo aver riavviato in modo errato il mio computer, la risoluzione della mia schermata di accesso non è la 1440x900 predefinita, ma penso 1600x900. Ora, ho questo monitor che è davvero pessimo nella gestione delle risoluzioni che non è progettato per gestire e mostrerà una sciocca "risoluzione errata" che salta sullo schermo.

Esiste un modo per fare in modo che la schermata di accesso carichi una risoluzione 1440x900, qualunque cosa accada? Sto eseguendo Ubuntu 11.10 con Unity e LightDM.


Per me, da tutte le soluzioni solo questo ha funzionato nel 18.04 con lightdm: askubuntu.com/questions/507726/…
Takkat

Risposte:


40

È possibile creare uno script per questo ( risoluzione LightDM sorgente ).

  1. Innanzitutto dobbiamo scoprire qual è l'identificatore del tuo monitor. Apri un terminale, inizia a digitare terminalil trattino unitario per vedere l'opzione o premi Ctrl+ Alt+T
  2. Digita / copia questo comando per mostrare i dettagli di visualizzazione:

    xrandr -q
    

    Se hai un solo monitor vedrai una linea nell'output come il seguente (probabilmente con alcuni valori diversi, è l'identificatore all'inizio che stiamo cercando):

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

    L'identificatore dello schermo è DVI-0 in questo caso

  3. Apri il tuo editor di testo preferito, usa gedit per questo esempio, premi Alt+ F2e digitagedit

  4. Digita / copia questo in:

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

    Salvalo sul desktop come lightdmxrandr.sh

  5. Potresti voler testare lo script prima di metterlo in pratica. Tornando al terminal, vai al punto in cui l'abbiamo appena salvato:

    cd ~/Desktop
    

    Ora dobbiamo renderlo eseguibile:

    chmod a+rx lightdmxrandr.sh
    

    Ora eseguilo:

    ./lightdmxrandr.sh
    

    (Se lo schermo si corregge automaticamente dopo l'accesso, probabilmente non vedrai alcuna differenza, quindi potresti voler utilizzare una risoluzione di prova diversa ma sai che funziona durante il test)

  6. Ora spostiamo la piccola sceneggiatura che abbiamo realizzato:

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

    Se non lo usi, sudopotresti ricevere un errore di autorizzazione (utilizzo questa cartella per preferenza personale)

  7. Dobbiamo ora eseguirlo in lightdm, passare alla cartella corretta:

    cd /etc/lightdm
    
  8. Apri il file conf di lightdm:

    sudo gedit lightdm.conf
    
  9. Ora aggiungi le istruzioni per eseguire lo script dopo l'ultima riga e salva:

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

Ora riavvia e ciò dovrebbe impostare la risoluzione corretta nella schermata di accesso di lightdm.

(queste istruzioni potrebbero sembrare lunghe ma non impiegheranno molto)


1
Grazie! Uso la sceneggiatura di Leon menzionata di seguito. askubuntu.com/a/88882/28071
beanaroo

È una bella sceneggiatura, penso che la conserverò per un uso futuro!
captain_G

Sfortunatamente questo rompe le cose in Ubuntu 13.04. Probabilmente perché hanno apportato enormi cambiamenti al sistema operativo.
Patrick,

Inoltre non funziona con Ubuntu 13.10 + driver NVIDIA 319: lo script viene eseguito ma la risoluzione non cambia, probabilmente perché il driver NVIDIA lo sovrascrive.
speakr

Penso che dovrebbe essere chown root:rootanche?
Aquarius Power,

38

Ho trovato una soluzione molto semplice che funziona perfettamente con me in esecuzione 13.04. ( aggiornamento : ora 13.10) su un laptop con uno schermo esterno da 24 "che non è collegato in modo permanente.

Copierò da qui

  1. accesso
  2. usa xrandr o l'utility di controllo Display per configurare i tuoi monitor come desideri che vengano configurati nella schermata di accesso
  3. copia ~ / .config / monitors.xml in /var/lib/lightdm/.config

Dato che i miei monitor erano già configurati correttamente, dovevo solo eseguire il passaggio 3.

Alcune altre risposte fornite qui hanno funzionato per me, ma solo in uno scenario specifico mentre correvo il rischio di un sistema inutilizzabile in altri scenari (ERRORE MODALITÀ GRAFICA BASSO). Ad esempio con il monitor esterno collegato in modo permanente (risposta accettata da @captain_G) o con lo stesso dispositivo sempre collegato all'uscita utilizzata per il monitor esterno (script di @Axlrod). Sembra che la risposta di @ MarcoV sia la soluzione più generica, tuttavia implica comunque regole di scripting.


4
Molto più semplice delle altre risposte ... Mi chiedo perché non abbia più voti. Bene, ha il mio.
aap

Inoltre, anche se aiuta la schermata di accesso, sarebbe bello se altri utenti non dovessero impostare nuovamente la risoluzione del display.
aap

3
Invece di copiare il file, crea un collegamento in modo che venga automaticamente aggiornato ogni volta che modifichi le impostazioni dello schermo: $ sudo ln ~/.config/monitors.xml /var/lib/lightdm/.config/monitors.xml(No, i collegamenti simbolici NON funzionano.)
Nathan JB,

3
Quale applicazione scrive / aggiorna monitors.xml? Sto usando XFCE e questo file ha 2 anni ed è completamente obsoleto. Non riesco a trovare un file simile.
scai,

1
Questo è l'approccio corretto rispetto alla creazione di uno script per modificare le risoluzioni. .config / monitors.xml può supportare la configurazione di più monitor (vale a dire la tua configurazione al lavoro con un dock e 2 monitor rispetto alla tua configurazione a casa senza dock e 1 monitor esterno). Creare uno script manuale per impostare la risoluzione sarebbe relativamente più complesso da fare
Iyad K,

20

Invece di creare uno script, puoi aggiungere al file /etc/lightdm/lightdm.confuna riga come questa:

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

Prima di inserire assicurarsi che il comando funzioni, perché con un comando errato, lightdm non si avvierà.


Ciao, i tuoi xrandcomandi dicono:warning: output default not found; ignoring
SebMa

@SebMa Devi usare il nome di output corretto!
Ken Sharp,

2

Per una configurazione multi monitor in cui è possibile scollegare il laptop e utilizzarlo senza, ecco una soluzione semplice:

correre:

xrandr

Prendi i dispositivi che stai usando il laptop è di solito LVDS1, e per me ho un DP2 (displayport 2) potrebbe essere HDMI1 o qualsiasi altra cosa, basta trovare quelli con risoluzioni elencate accanto a loro.

Crea questo piccolo file 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

Sostituisci LVDS1 con la connessione del monitor del tuo laptop.

Sostituire DP2 con la connessione del monitor esterno.

Posiziona lo script bash in / usr / bin / local /

chmod + x lo script

modifica /etc/lightdm/lightdm.conf

Inserisci

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

Reboot.

La modifica della risoluzione avverrà solo quando sei effettivamente a quel display ora.

Se hai più posti con monitor / risoluzioni differenti sullo stesso connettore, dovrai inserire più intelligenza nel tuo script bash.


2

Ho appena migliorato la precedente sceneggiatura di Axlrod .

Tutto quello che devi fare è specificare quale monitor utilizzare primario e quale è il display del tuo laptop (LVDS).

#! / Bin / bash
LVDS = "LVDS-0"
= PRIMARIE "VGA-0"

funzione get_displays ()
{
        xrandr -q | grep connesso | awk "{print $ 1}"
}

funzione get_resolution ()
{
        [[-z "$ 1"]] && return 0 || xrandr -q | grep -A1 $ 1 | coda -1 | awk '{print $ 1}' | grep -e "^ [0-9]"
}

per la visualizzazione in $ (get_displays); fare
        risoluzione = `get_resolution $ display`

        [[$ display == $ PRIMARY]] && arg = "- primary";
        [[-n $ risoluzione]] && mode = "- modalità $ risoluzione";

        if [[$ display == $ LVDS]]; poi
                xrandr --output $ display --off
        elif [[-n $ mode]]; poi
                xrandr --output $ display $ arg $ mode
        fi
        risoluzione arg modalità unset;
fatto

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

quindi nel file:

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

Salva ed esci. I valori sono stati ottenuti dal comando xrandr -q. VGA1è il nome del mio connettore ed 1152x864è il nome della risoluzione.

Questo funziona per Xubuntu 16.04. Imposta una risoluzione preferita e per me mi consente di impostare la risoluzione della schermata di accesso, invece di averla predefinita alla massima risoluzione supportata.

Modificato dalle risposte qui


1
Dopo aver installato open-vm-tools e open-vm-tools-desktop, la copia di monitor.xml in /var/lib/lightdm/.config non funzionava più per me. Specificare la risoluzione preferita come questa l'ha riparata per me.
jropella,

1

Quello che ho trovato utile è stato un post sul sito Web della guida di Ubuntu . Ho provato tante cose in Ubuntu 11.10 e ho persino provato a usare semplicemente GNOME Classic. La risoluzione era sempre di 1024x768 e quando l'ho impostata manualmente su 1440x900 era "virtuale", voglio dire che dovevo scorrere con il mouse per esplorare l'intero desktop che andava oltre le dimensioni reali dello schermo.

Nel terminale ho eseguito questo comando:

sudo gedit /etc/default/grub

Il caricamento dell'editor di testo può richiedere del tempo. Una volta caricato, ho modificato la linea

GRUB_GFXMODE=1024x768

e lo ha cambiato in:

GRUB_GFXMODE=1440x900

Ricordarsi di eseguire update-grubper applicare le modifiche.

Successivamente ho provato a reinstallare i driver VESA (in questo computer ho una GeForce 260 GTX). So che il modo migliore è usare i driver ufficiali Nvidia, ma usandoli il problema è sempre stato lo stesso ... Certo, penso, ora le prestazioni saranno peggiori.

Quindi, controllando il pannello Impostazioni server Nvidia X ho verificato che la mia risoluzione era stata aggiunta e, passando ad essa, ha reso l'aspetto dello schermo giusto. In realtà sto usando Ubuntu 11.10 ma in GNOME Classic.

Sono un principiante di Linux, quindi spero di aver scritto cose decenti.


0

Non confondere con script o file di configurazione che hanno la possibilità di rendere inutilizzabile la schermata di accesso!

Effettua invece il login e imposta le impostazioni dello schermo preferite *, quindi esegui questo comando:

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

La risoluzione di accesso ora rifletterà sempre le impostazioni dell'utente al quale hai effettuato l'accesso.

* Non dimenticare di fare clic su "Applica"


Funziona ma è secondario. Fa un carico normale nella risoluzione massima e quindi passa alle tue impostazioni. Come puoi caricare la risoluzione corretta per iniziare?
Goddard il

0

La sceneggiatura di Axelrod è in qualche modo difettosa, in quanto un grep per "connesso" afferra anche tutti i display "disconnessi" ... non quello che vogliamo ...

Inoltre, usare grep con awk e tail, ecc ... è inutilmente tortuoso, e suggerirei di seguito come segue. Inoltre, in get_resolution cambiamo il codice di ritorno in 1, poiché un codice di ritorno pari a zero è generalmente indicativo di una mancanza di errori, quindi utilizziamo 1 se il primo parametro è assente.

In conclusione, istanziando la parte principale dello script una funzione, può essere reperita ed eseguita in qualsiasi momento se necessario in una libreria di funzioni, nonché ottenere l'utilizzo di variabili locali, che non devono essere disattivate.

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

Ecco come l'ho fatto funzionare in Xubuntu 16.04.

È necessario ottenere insieme a stringa per la risoluzione desiderata. Questo è all'interno del risultato del comando:

xrandr --verbose

Ora scegli la parte con la risoluzione che desideri. Sarà simile a:

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

Dai dati sopra si dovrebbe ottenere la stringa 108.000 1152 1216 1344 1600 864 865 868 900 +HSync +VSync.

Per trovare il nome del tuo output, trova anche una riga simile:

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

Qui il mio output è chiamato VGA1.

Ora crea lo script:

sudo gedit /usr/share/lightdmxrandr.sh

Quindi nel file scrivi quanto segue:

#!/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

Salva e chiudi il file. Rendi eseguibile lo script:

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

Crea un file di configurazione per chiamare lo script appena creato.

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

all'interno di questo file inserisci:

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

Salva e chiudi il file. Riavvia e, si spera, la risoluzione che hai scelto sarà al tuo login.

In termini pratici questo è l'unico modo che ha funzionato per me, anche se ricreare risoluzioni esistenti non è logico.

Risposta modificata da questa domanda .

Nota

Un modo alternativo per ottenere la stringa di risoluzione lunga è il programma cvt. Per ottenere una stringa per la risoluzione 1152x864, frequenza di aggiornamento 75,00:

cvt 1152 864 75

Questo mi ha dato una risoluzione leggermente diversa rispetto alla mia risoluzione desktop, ed è il motivo per cui non ho incluso il metodo nella risposta principale.


0

Se stai usando il programma di benvenuto GTK di LightDM, puoi eseguire xrandr -qper trovare i nomi dei tuoi monitor, quindi modificare /etc/lightdm/lightdm-gtk-greetere impostare la proprietà active-monitorcome descritto nei commenti all'interno di quel file. Questa proprietà può assumere più valori ordinati anche #cursorper il monitor che attualmente mostra il cursore del mouse.


0

mi piace allegare il mio script che configura i monitor a uno dei tasti multimediali sulla tastiera che altrimenti non uso. attualmente ho il pulsante con l'etichetta 'Windows Media Center' per forzare i miei schermi nella loro configurazione preferita. in questo modo se stai volando alla cieca e i tuoi monitor non si sincronizzano con la risoluzione desiderata, schiaccia semplicemente il tasto di scelta rapida e tutto è risolto.


-1

"Modalità schermo preferite" potrebbe essere il problema

Suppongo che il tuo monitor mostri che l'alta risoluzione dello schermo è preferita. Ora desideri sovrascrivere questa preferenza predefinita . Vedi la mia risposta a una domanda molto simile per i dettagli su come farlo.

Ho avuto il problema opposto: ho sempre avuto una risoluzione dello schermo inferiore (1280x1024) rispetto a quella che volevo (1600x1200). Tuttavia, la correzione che ho trovato (e descritto nella risposta collegata) si spera sia applicabile analogamente al tuo problema.


Chiunque abbia votato verso il basso la mia risposta, potrebbe per favore aggiungere una nota sul perché pensi che questa risposta non sia utile?
Chriki,

-2

Ho avuto lo stesso problema sul mio MacBook Pro a metà 2014 (11,1) con Xenial. Ho provato tutte le soluzioni sopra menzionate in varie forme, ma invariabilmente X sarebbe entrato in modalità a bassa grafica fail-safe (ma visualizzato nella stessa risoluzione che volevo impostare come predefinito non meno.

Dopo molte discussioni sui forum e googling, risulta che avevo dimenticato la soluzione potenziale più semplice e predefinita: nomodeset. Ciò ha risolto il problema.

TL; DR: non dimenticare di provare nomodeset! Esp. su un MacbookPro 11,1.


-3

Ho creato questo script per renderlo più dinamico (più aree di lavoro / monitor diversi).

Unico fastidio: quando accedi da lightdm, lo schermo lampeggia ancora come se volesse cambiare risoluzione: s


1
La pasta non è stata trovata.
Tobold,

Infatti; se hai ancora una copia locale dello script, considera di ricaricarlo.
mercoledì

1
Ho caricato lo script su github. Non so perché paste.ubuntu.com lo abbia rimosso :(
Leon
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.