Nieprawidłowa rozdzielczość ekranu logowania


44

W dziwnych przypadkach, zwykle po niepoprawnym ponownym uruchomieniu komputera, rozdzielczość ekranu logowania nie jest domyślna 1440 x 900, ale myślę, że 1600 x 900. Teraz mam ten monitor, który naprawdę źle radzi sobie z rozdzielczością, z którą nie jest przeznaczony do obsługi i pokaże głupie okienko „złej rozdzielczości” przeskakujące po ekranie.

Czy istnieje sposób na załadowanie ekranu logowania w rozdzielczości 1440 x 900 bez względu na wszystko? Używam Ubuntu 11.10 z Unity i LightDM.


Dla mnie ze wszystkich rozwiązań tylko ten działał w 18.04 z lightdm: askubuntu.com/questions/507726/...
Takkat

Odpowiedzi:


40

Możesz utworzyć skrypt dla tego (źródłowa rozdzielczość LightDM ).

  1. Najpierw musimy dowiedzieć się, jaki jest identyfikator Twojego monitora. Otwórz terminal, zacznij pisać terminalw desce rozdzielczej jedności, aby zobaczyć opcję, lub naciśnij Ctrl+ Alt+T
  2. Wpisz / skopiuj to polecenie, aby wyświetlić szczegóły wyświetlania:

    xrandr -q
    

    Jeśli masz tylko jeden monitor, na wyjściu zobaczysz linię podobną do następującej (prawdopodobnie z pewnymi różnymi wartościami, jest to identyfikator na początku, którego szukamy):

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

    Identyfikator ekranu to DVI-0 w tym przypadku

  3. Otwórz swój ulubiony edytor tekstu, w tym przykładzie użyj gedit, naciśnij Alt+ F2i wpiszgedit

  4. Wpisz / skopiuj to w:

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

    Zapisz to na pulpicie jako lightdmxrandr.sh

  5. Możesz przetestować skrypt, zanim wprowadzimy go w życie. Z powrotem w terminalu przejdź do miejsca, w którym go właśnie zapisaliśmy:

    cd ~/Desktop
    

    Teraz musimy uczynić go wykonywalnym:

    chmod a+rx lightdmxrandr.sh
    

    Teraz uruchom:

    ./lightdmxrandr.sh
    

    (Jeśli ekran automatycznie poprawi się automatycznie po zalogowaniu, prawdopodobnie nie zobaczysz różnicy, więc możesz chcieć użyć innej rozdzielczości testowej, ale wiesz, że działa podczas testowania)

  6. Teraz przenieśmy mały skrypt, który stworzyliśmy:

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

    Jeśli nie użyjesz sudo, możesz otrzymać błąd uprawnień (korzystam z tego folderu z osobistych preferencji)

  7. Musimy teraz uruchomić to w lightdm, przejść do odpowiedniego folderu:

    cd /etc/lightdm
    
  8. Otwórz plik conf lightdm:

    sudo gedit lightdm.conf
    
  9. Teraz dodaj instrukcję, aby uruchomić skrypt po ostatnim wierszu i zapisz:

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

Teraz uruchom ponownie i powinno to ustawić prawidłową rozdzielczość na ekranie logowania lightdm.

(instrukcje te mogą wyglądać na długie, ale wcale nie trwają długo)


1
Dzięki! Używam skryptu Leona wymienionego poniżej. askubuntu.com/a/88882/28071
beanaroo

To fajny skrypt, myślę, że zapiszę go do wykorzystania w przyszłości!
captain_G

Niestety, to tylko psuje rzeczy w Ubuntu 13.04. Prawdopodobnie dlatego, że dokonali ogromnych zmian w systemie operacyjnym.
Patrick

Nie działa również ze sterownikiem Ubuntu 13.10 + NVIDIA 319: Skrypt jest wykonywany, ale rozdzielczość się nie zmienia - prawdopodobnie dlatego, że sterownik NVIDIA zastępuje go.
speakr

Myślę, że tak też powinno być chown root:root?
Aquarius Power,

38

Znalazłem bardzo proste obejście, które działa idealnie dla mnie w wersji 13.04. ( aktualizacja : teraz 13.10) na laptopie z 24-calowym ekranem zewnętrznym, który nie jest na stałe podłączony.

Skopiuję stąd

  1. Zaloguj sie
  2. użyj xrandr lub narzędzia kontrolnego Displays do skonfigurowania monitorów tak, jak chcesz, aby były konfigurowane na ekranie logowania
  3. skopiuj ~ / .config / monitors.xml do /var/lib/lightdm/.config

Ponieważ miałem już poprawnie skonfigurowane monitory, musiałem po prostu zrobić krok 3.

Niektóre inne odpowiedzi podane tutaj działały dla mnie, ale tylko w konkretnym scenariuszu, przy jednoczesnym ryzyku nieużytecznego systemu w innych scenariuszach (BŁĄD TRYBU NISKIEJ GRAFIKI). Na przykład z zewnętrznym monitorem na stałe podłączonym (akceptowana odpowiedź przez @captain_G) lub zawsze z tym samym urządzeniem podłączonym do wyjścia używanego przez zewnętrzny monitor (skrypt przez @Axlrod). Wydaje się, że odpowiedź @ MarcoV jest najbardziej ogólnym rozwiązaniem, jednak nadal wymaga reguł skryptowych.


4
Dużo prostsze niż inne odpowiedzi ... Zastanawiam się, dlaczego nie ma więcej głosów. Cóż, ma moje.
aap

Z drugiej strony, chociaż pomaga to w wyświetlaniu ekranu logowania, byłoby miło, gdyby inni użytkownicy nie musieli ponownie ustawiać rozdzielczości wyświetlania.
aap

3
Zamiast kopiować plik, utwórz link do niego, aby był automatycznie aktualizowany przy każdej zmianie ustawień ekranu: $ sudo ln ~/.config/monitors.xml /var/lib/lightdm/.config/monitors.xml(Nie, dowiązania symboliczne NIE działają.)
Nathan JB

3
Która aplikacja pisze / aktualizuje monitors.xml? Używam XFCE, a ten plik ma 2 lata i jest całkowicie nieaktualny. Nie mogę znaleźć podobnego pliku.
scai

1
Jest to prawidłowe podejście, w przeciwieństwie do tworzenia skryptu do zmiany rozdzielczości. .config / monitors.xml może obsługiwać konfigurację wielu monitorów (tzn. konfigurację w pracy ze stacją dokującą i 2 monitory w porównaniu do konfiguracji w domu bez stacji dokującej i 1 monitora zewnętrznego). Stworzenie ręcznego skryptu do ustawienia rozdzielczości byłoby stosunkowo bardziej skomplikowane
Iyad K,

20

Możesz zamiast tworzyć skrypt, po prostu dodaj do pliku /etc/lightdm/lightdm.conftaką linię:

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

Przed wstawieniem upewnij się, że polecenie działa, ponieważ przy niewłaściwym poleceniu lightdm się nie uruchomi.


Cześć, twoje xrandkomendy mówią:warning: output default not found; ignoring
SebMa

@SebMa Musisz użyć poprawnej nazwy wyjściowej!
Ken Sharp

2

W przypadku konfiguracji z wieloma monitorami, w której możesz odłączyć laptopa i używać go bez, oto proste rozwiązanie:

biegać:

xrandr

Pobierz urządzenia, których używasz, to zwykle LVDS1, a dla mnie mam DP2 (displayport 2), może to być HDMI1 lub cokolwiek innego, po prostu znajdź te z rozdzielczościami wymienionymi obok nich.

Utwórz ten mały plik 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

Zamień LVDS1 na złącze monitora laptopa.

Zamień DP2 na podłączenie zewnętrznego monitora.

Umieść skrypt bash w / usr / bin / local /

chmod + x skrypt

edytuj /etc/lightdm/lightdm.conf

Dodaj

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

Restart.

Zmiana rozdzielczości nastąpi tylko wtedy, gdy jesteś teraz na tym ekranie.

Jeśli masz wiele miejsc z różnymi monitorami / rozdzielczościami na tym samym złączu, będziesz musiał wprowadzić więcej inteligencji do skryptu bash.


2

Nieznacznie poprawiłem powyższy skrypt Axlrod .

Wszystko, co musisz zrobić, to określić, który monitor będzie używany jako podstawowy, a który to ekran laptopa (LVDS).

#! / bin / bash
LVDS = „LVDS-0”
PODSTAWOWE = „VGA-0”

funkcja get_displays ()
{
        xrandr -q | grep podłączony | awk „{drukuj 1 $}”
}

funkcja get_resolution ()
{
        [[-z "1 $]] && return 0 || xrandr -q | grep -A1 1 $ | ogon -1 | awk „{print $ 1}” | grep -e "^ [0-9]"
}

do wyświetlenia w $ (get_displays); zrobić
        rozdzielczość = `get_resolution $ display`

        [[$ display == $ PRIMARY]] && arg = "- primary";
        [[-n $ rozdzielczość]] && mode = "- mode $ resolution";

        jeśli [[$ display == $ LVDS]]; następnie
                xrandr --output $ display --off
        elif [[tryb -n $]]; następnie
                xrandr - wyjście $ display $ arg $ tryb
        fi
        rozdzielczość arg w trybie rozbrojenia;
gotowy

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

następnie w pliku:

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

Zapisz i wyjdź. Wartości uzyskano z polecenia xrandr -q. VGA1to nazwa mojego łącznika i 1152x864nazwa rozdzielczości.

Działa to dla Xubuntu 16.04. Ustawia preferowaną rozdzielczość i dla mnie pozwala ustawić rozdzielczość ekranu logowania, zamiast domyślnie ustawiać najwyższą obsługiwaną rozdzielczość.

Zmodyfikowano tutaj z odpowiedzi


1
Po zainstalowaniu open-vm-tools i open-vm-tools-desktop kopiowanie monitors.xml do /var/lib/lightdm/.config nie działało już dla mnie. Określenie preferowanej rozdzielczości w ten sposób naprawiło to dla mnie.
jropella

1

Przydał mi się post na stronie przewodnika Ubuntu . Próbowałem tak wielu rzeczy w Ubuntu 11.10, a nawet próbowałem użyć po prostu GNOME Classic. Rozdzielczość zawsze wynosiła 1024 x 768, a kiedy ręcznie ustawiłem ją na 1440 x 900, była „wirtualna”, to znaczy musiałem przewijać myszką, aby eksplorować cały pulpit, który był poza rzeczywistymi wymiarami ekranu.

W terminalu uruchomiłem polecenie:

sudo gedit /etc/default/grub

Załadowanie edytora tekstu może chwilę potrwać. Po załadowaniu edytowałem linię

GRUB_GFXMODE=1024x768

i zmieniłem na:

GRUB_GFXMODE=1440x900

Pamiętaj, aby uruchomić, update-grubaby zastosować zmiany.

Następnie próbowałem ponownie zainstalować sterowniki VESA (na tym komputerze mam GeForce 260 GTX). Wiem, że lepszym sposobem jest użycie oficjalnych sterowników Nvidii, ale używanie ich zawsze było takie samo ... Pewnie, myślę, że teraz wydajność będzie gorsza.

Tak więc, sprawdzając panel ustawień serwera Nvidia X, zweryfikowałem, że moja rozdzielczość została dodana i przełączając się na nią, sprawiła, że ​​ekran wyglądał właściwie. Właściwie używam Ubuntu 11.10, ale w GNOME Classic.

Jestem nowicjuszem Linuksa, więc mam nadzieję, że napisałem przyzwoite rzeczy.


0

Nie psuj skryptów ani plików konfiguracyjnych, które mają możliwość uczynienia ekranu logowania bezużytecznym!

Zamiast tego zaloguj się i ustaw preferowane ustawienia ekranu *, a następnie uruchom następujące polecenie:

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

Twoja rozdzielczość logowania będzie teraz zawsze odzwierciedlać ustawienia użytkownika, do którego jesteś aktualnie zalogowany.

* Nie zapomnij kliknąć „Zastosuj”


To działa, ale jest drugorzędne. Robi normalne obciążenie w maksymalnej rozdzielczości, a następnie przełącza się na twoje ustawienia. Jak ustawić ładowanie poprawnej rozdzielczości, aby rozpocząć?
Goddard,

0

Skrypt Axelrod jest nieco wadliwy, ponieważ grep dla „połączonych” chwyta również wszystkie „odłączone” ekrany ... nie to, czego chcemy ...

Co więcej, używanie grep z awk i ogonem itp. Jest marnotrawstwem okrężnym i sugerowałbym, co następuje poniżej. Dodatkowo w get_resolution zmieniamy kod powrotu na 1, ponieważ kod powrotu zero zwykle wskazuje na brak błędów, dlatego używamy 1, jeśli pierwszy parametr jest nieobecny.

Podsumowując, poprzez utworzenie instancji głównej części skryptu funkcji, można ją uzyskać i wykonać w dowolnym momencie, jeśli zajdzie taka potrzeba, w bibliotece funkcji, a także uzyskać użycie zmiennych lokalnych, które nie muszą być rozbrojone.

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

Tak to działa w Xubuntu 16.04.

Musisz uzyskać wzdłuż ciągu dla żądanej rozdzielczości. Jest to wynik polecenia:

xrandr --verbose

Teraz wybierz część z żądaną rozdzielczością. Będzie to wyglądać mniej więcej tak:

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

Z powyższych danych powinieneś pobrać ciąg 108.000 1152 1216 1344 1600 864 865 868 900 +HSync +VSync.

Aby znaleźć nazwę swojego wyjścia, znajdź również linię podobną:

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

Tutaj nazwa mojego wyjścia VGA1.

Teraz utwórz skrypt:

sudo gedit /usr/share/lightdmxrandr.sh

Następnie w pliku napisz:

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

Zapisz i zamknij plik. Spraw, aby skrypt był wykonywalny:

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

Utwórz plik konfiguracyjny, aby wywołać właśnie utworzony skrypt.

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

w tym pliku wpisz:

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

Zapisz i zamknij plik. Uruchom ponownie i mam nadzieję, że wybrana rozdzielczość będzie przy logowaniu.

W praktyce jest to jedyny sposób, który działał dla mnie, mimo że ponowne tworzenie istniejących rezolucji nie jest logiczne.

Odpowiedź zmodyfikowana z tego pytania .

Uwaga

Alternatywnym sposobem uzyskania ciągu o wysokiej rozdzielczości jest program cvt. Aby uzyskać ciąg dla rozdzielczości 1152 x 864, częstotliwość odświeżania 75,00:

cvt 1152 864 75

To dało mi nieco inną rozdzielczość niż rozdzielczość pulpitu i dlatego nie umieściłem tej metody w głównej odpowiedzi.


0

Jeśli używasz programu GTDM LightDM, możesz uruchomić, xrandr -qaby znaleźć nazwy swoich monitorów, a następnie edytować /etc/lightdm/lightdm-gtk-greeteri ustawić właściwość active-monitorzgodnie z opisem w komentarzach w tym pliku. Ta właściwość może przyjmować wiele uporządkowanych wartości, w tym #cursordla monitora, który aktualnie pokazuje kursor myszy.


0

lubię dołączać skrypt, który konfiguruje monitory do jednego z klawiszy multimedialnych na klawiaturze, których inaczej nie używam. obecnie mam przycisk oznaczony „Windows Media Center”, aby wymusić wyświetlanie moich wyświetlaczy w preferowanej konfiguracji. w ten sposób, jeśli latasz na oślep, a twoje monitory nie synchronizują się z żądaną rozdzielczością, po prostu zetrzyj skrót klawiszowy i wszystko zostanie naprawione.


-1

Problemem mogą być „Preferowane tryby ekranu”

Zakładam, że twój monitor zgłasza wysoką rozdzielczość ekranu jako preferowaną. Teraz chcesz zastąpić tę domyślną preferencję . Zobacz moją odpowiedź na bardzo podobne pytanie, aby dowiedzieć się, jak to zrobić.

Miałem odwrotny problem: zawsze miałem niższą rozdzielczość ekranu (1280x1024) niż chciałem (1600x1200). Mam nadzieję, że znaleziona przeze mnie poprawka (i opisana w powiązanej odpowiedzi) będzie miała zastosowanie analogicznie do twojego problemu.


Kto głosował na moją odpowiedź, czy mógłbyś dodać notatkę, dlaczego uważasz, że ta odpowiedź nie jest przydatna?
Chriki,

-2

Miałem ten sam problem na moim MacBooku Pro w połowie 2014 roku (11,1) z systemem Xenial. Wypróbowałem wszystkie wyżej wymienione rozwiązania w różnych formach, ale niezmiennie powodowałoby przejście X w bezpieczny tryb niskiej grafiki (ale wyświetlany w tej samej rozdzielczości chciałem, aby ustawił się jako domyślny nie mniej.

Po wielu kłótniach na forach i wyszukiwaniu w Google okazuje się, że zapomniałem najprostszego i domyślnego potencjalnego rozwiązania: nomodeset. To naprawiło problem.

TL; DR: Nie zapomnij wypróbować nomodeset! Esp. na MacbookPro 11,1.


-3

Stworzyłem ten skrypt, aby był bardziej dynamiczny (wiele obszarów roboczych / różne monitory).

Tylko irytacja: gdy logujesz się z lightdm, ekran wciąż miga, jakby chciał zmienić rozdzielczość: s


1
Nie znaleziono pasty.
Tobold

W rzeczy samej; jeśli nadal masz lokalną kopię skryptu, rozważ ponowne przesłanie go.
wchargin

1
Przesłałem skrypt do github. Nie wiem, dlaczego paste.ubuntu.com to usunęło :(
Leon
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.