Неправильное разрешение экрана входа

В некоторых случаях, обычно после неправильной перезагрузки компьютера, разрешение экрана входа в систему не соответствует стандартному 1440x900, но я думаю, что 1600x900. Теперь у меня есть этот монитор, который действительно плохо справляется с разрешениями, которые он не предназначен для обработки, и будет показывать глупое окно "неправильного разрешения", прыгающее по экрану.

Есть ли способ заставить экран входа в систему загружать разрешение 1440x900, несмотря ни на что? Я использую Ubuntu 11.10 с Unity и LightDM.

17 ответов

Решение

Вы можете сделать скрипт для этого (исходное разрешение LightDM).

  1. Во-первых, нам нужно выяснить, каков идентификатор вашего монитора. Откройте терминал, начните печатать terminal в вашем единстве, чтобы увидеть опцию или нажмите Ctrl+Alt+T
  2. Введите / скопируйте эту команду, чтобы показать детали вашего дисплея:

    xrandr -q
    

    Если у вас только один монитор, вы увидите строку в выводе, подобную следующей (возможно, с некоторыми другими значениями, это идентификатор в начале, за которым мы следуем):

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

    Идентификатор экрана в этом случае DVI-0

  3. Откройте ваш любимый текстовый редактор, давайте используем Gedit для этого примера, нажмите Alt+F2 и введите gedit

  4. Введите / скопируйте это в:

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

    Сохраните это на рабочем столе как lightdmxrandr.sh

  5. Возможно, вы захотите проверить сценарий, прежде чем мы применим его на практике. Вернувшись в терминал, перейдите туда, где мы его только что сохранили:

    cd ~/Desktop
    

    Теперь нам нужно сделать его исполняемым:

    chmod a+rx lightdmxrandr.sh
    

    Теперь запустите это:

    ./lightdmxrandr.sh
    

    (Если ваш экран автоматически корректируется после входа в систему, вы, вероятно, не увидите различий, поэтому вы можете использовать тестовое разрешение, которое отличается, но вы знаете, что работает во время тестирования)

  6. Теперь давайте переместим маленький скрипт, который мы сделали:

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

    Если вы не используете sudo Вы можете получить ошибку разрешения (я использую эту папку из личных предпочтений)

  7. Теперь нам нужно запустить это в lightdm, перейдите в правильную папку:

    cd /etc/lightdm
    
  8. Откройте файл conf lightdm:

    sudo gedit lightdm.conf
    
  9. Теперь добавьте инструкцию для запуска вашего скрипта после последней строки и сохраните:

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

Теперь перезагрузите компьютер и установите правильное разрешение на экране входа в систему lightdm.

(эти инструкции могут выглядеть долго, но совсем не долго)

Я нашел очень простой обходной путь, который отлично работает для меня, запустив 13.04. (обновление: теперь 13.10) на ноутбуке с 24-дюймовым внешним экраном, который не подключен постоянно.

Я просто скопирую отсюда

  1. авторизоваться
  2. используйте xrandr или утилиту управления дисплеями, чтобы настроить мониторы так, как вы хотите, чтобы они настраивались на экране входа
  3. скопируйте ~/.config/monitors.xml в /var/lib/lightdm/.config

Поскольку мои мониторы уже были настроены правильно, мне просто нужно было выполнить шаг 3.

Некоторые другие ответы, приведенные здесь, сработали для меня, но только в определенном сценарии, в то время как в других сценариях существует риск непригодности системы (LOW GRAPHICS MODE ERROR) Например, с постоянно подключенным внешним монитором (принятый ответ @captain_G) или всегда с одним и тем же устройством, подключенным к выходу, используемому для внешнего монитора (сценарий @Axlrod). Кажется, что ответ @MarcoV является наиболее общим решением, однако оно все еще включает правила написания сценариев.

Вы можете вместо создания сценария просто добавить в файл /etc/lightdm/lightdm.conf такая строка:

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

Перед вставкой убедитесь, что команда работает, потому что при неправильной команде lightdm не запустится.

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

затем в файле:

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

Сохранить и выйти. Значения были получены из команды xrandr -q, VGA1 это имя моего разъема и 1152x864 это название резолюции.

Это работает для Xubuntu 16.04. Он устанавливает предпочтительное разрешение, и для меня он позволяет мне устанавливать разрешение экрана входа в систему, вместо того, чтобы использовать по умолчанию максимальное поддерживаемое разрешение.

Модифицировано из ответов здесь

Для настройки нескольких мониторов, когда вы можете отключить ноутбук и использовать его без, вот простое решение:

бежать:

xrandr

Получите устройства, которые вы используете для ноутбука, обычно LVDS1, и для меня у меня есть DP2 (displayport 2), это может быть HDMI1 или что-то еще, просто найдите те с разрешениями, перечисленными рядом с ними.

Создайте этот небольшой файл 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

Замените LVDS1 подключением монитора вашего ноутбука.

Замените DP2 подключением к внешнему монитору.

Поместите bash-скрипт в / usr / bin / local /

chmod + x скрипт

редактировать /etc/lightdm/lightdm.conf

добавлять

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

Перезагружать.

Изменение разрешения произойдет только тогда, когда вы сейчас находитесь на этом дисплее.

Если у вас есть несколько мест с разными мониторами / разрешениями на одном разъеме, вам придется добавить больше интеллекта в ваш bash-скрипт.

Просто немного улучшил сценарий Axlrod выше.

Все, что вам нужно сделать, это указать, какой монитор использовать в качестве основного, а какой - дисплей вашего ноутбука (LVDS).

#! / Bin/ Баш
LVDS="LVDS-0"
ПЕРВИЧНЫЙ = "VGA-0"

функция get_displays ()
{
        xrandr -q | grep подключен | awk '{print $ 1}'
}

функция get_resolution ()
{
        [[-z "$ 1"]] && return 0 || xrandr -q | grep -A1 $ 1 | хвост -1 | awk '{print $ 1}' | grep -e "^ [0-9]"
}

для отображения в $ (get_displays); делать
        resolution = `get_resolution $ display`

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

        если [[ $display == $LVDS ]]; затем
                xrandr --output $display --off
        elif [[ -n $mode ]]; затем
                xrandr --output $display $arg $mode
        фи
        сбросить режим разрешения arg;
сделанный

То, что я нашел полезным, было сообщение на веб-сайте руководства Ubuntu. Я пробовал так много вещей в Ubuntu 11.10 и даже пытался использовать просто GNOME Classic. Разрешение всегда было 1024x768, и когда я вручную установил его на 1440x900, оно было "виртуальным", я имею в виду, что мне приходилось прокручивать мышью, чтобы исследовать весь рабочий стол, выходящий за рамки реальных размеров экрана.

В Терминале я запустил эту команду:

sudo gedit /etc/default/grub

Текстовый редактор может занять некоторое время для загрузки. После загрузки я отредактировал строку

GRUB_GFXMODE=1024x768

и изменил его на:

GRUB_GFXMODE=1440x900

Не забудьте бежать update-grub применить изменения.

После этого я попытался переустановить драйверы VESA (на этом компьютере у меня GeForce 260 GTX). Я знаю, что лучше использовать официальные драйверы Nvidia, но при их использовании проблема всегда была одна и та же... Думаю, теперь производительность будет хуже.

Итак, проверив панель "Настройки сервера Nvidia X", я убедился, что мое разрешение было добавлено и, переключившись на него, экран приобрел правильный вид. На самом деле я использую Ubuntu 11.10, но в GNOME Classic.

Я новичок в Linux, так что надеюсь, что я написал достойные вещи.

Это самое простое решение. Работает на Xubuntu 20.40.

  • Получите имя и разрешение вашего монитора от xrandr -q.
  • Перейти к Settings> LightDM Greeter> Misc.
  • включить Readerфлажок и введите xrandr --output DVI-I-0 --mode 1280x720.
  • Включить при запуске.

Не копайтесь в скриптах или конфигурационных файлах, которые могут сделать ваш экран входа непригодным для использования!

Вместо этого войдите в систему и установите предпочтительные настройки экрана *, затем выполните эту команду:

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

Ваше разрешение входа в систему теперь всегда будет отражать настройки пользователя, в котором вы в настоящий момент вошли.

* Не забудьте нажать кнопку "Применить"

Вот так у меня это работает в Xubuntu 16.04.

Вам нужно получить вдоль строки для желаемого разрешения. Это в результате выполнения команды:

xrandr --verbose

Теперь выберите часть с разрешением, которое вы хотите. Это будет выглядеть примерно так:

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

Из приведенных выше данных вы должны получить строку 108.000 1152 1216 1344 1600 864 865 868 900 +HSync +VSync,

Чтобы найти название вашего вывода, найдите строку, аналогичную тоже:

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

Здесь мой вывод называется VGA1,

Теперь создайте скрипт:

sudo gedit /usr/share/lightdmxrandr.sh

Затем в файле напишите следующее:

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

Сохраните и закройте файл. Сделать скрипт исполняемым:

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

Создайте файл конфигурации для вызова только что созданного скрипта.

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

внутри этого файла введите:

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

Сохраните и закройте файл. Перезапустите и, надеюсь, выбранное вами разрешение будет при вашем входе в систему.

В практическом плане это единственный способ, который сработал для меня, хотя воссоздание существующих разрешений нелогично.

Ответ изменен из этого вопроса.

нота

Альтернативный способ получить длинную строку разрешения - программа cvt, Чтобы получить строку для разрешения 1152x864, обновите частоту 75.00:

cvt 1152 864 75

Это дало мне немного другое разрешение, чем разрешение рабочего стола, и по этой причине я не включил метод в основной ответ.

Сценарий Аксельрода несколько неисправен, так как grep для "подключен" также захватывает все "отключенные" дисплеи... не то, что мы хотим...

Более того, использование grep с awk, tail и т. Д. Является расточительным, и я бы предложил следующее. Кроме того, в get_resolution мы меняем код возврата на 1, поскольку нулевой код возврата обычно указывает на отсутствие ошибок, поэтому мы используем 1, если первый параметр отсутствует.

В заключение, создавая экземпляр основной части скрипта функции, она может быть получена и выполнена в любое другое время, если это необходимо, в библиотеке функций, а также получить использование локальных переменных, которые не нужно сбрасывать.

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;

Мне нравится прикреплять мой скрипт, который настраивает мониторы, к одной из клавиш мультимедиа на моей клавиатуре, которую я не использую иначе. в настоящее время у меня есть кнопка с надписью "Windows Media Center", чтобы заставить мои дисплеи в их предпочтительной конфигурации таким образом, если вы летите вслепую и ваши мониторы не синхронизируются с желаемым разрешением, просто нажмите горячую клавишу и все исправлено.

Если вы используете GTDM приветствие LightDM, вы можете запустить xrandr -q чтобы найти названия ваших мониторов, затем отредактируйте /etc/lightdm/lightdm-gtk-greeter и установить свойство active-monitor как описано в комментариях внутри этого файла. Это свойство может принимать несколько упорядоченных значений, включая #cursor для монитора, который в данный момент показывает курсор мыши.

Принятый ответ при вводе работает, если в вашей системе lightdm.conf, и по какой-то причине в моем Xubuntu 20.04 этого не было.

Чтобы обойти это, создайте /etc/lightdm/lightdm.conf файл со следующим содержанием:

[SeatDefaults]
display-setup-script=/home/owner/xrandr_for_lightdm.sh

Я бы предпочел решение, основанное на копировании, такое как Tobold, но 20.04 оно не сработало для меня.

"Предпочтительные режимы экрана" могут быть проблемой

Я предполагаю, что ваш монитор сообщает о высоком разрешении экрана как предпочтительном. Теперь вы хотели бы переопределить эту настройку по умолчанию. Смотрите мой ответ на очень похожий вопрос, чтобы узнать, как это можно сделать.

У меня была противоположная проблема: у меня всегда было более низкое разрешение экрана (1280x1024), чем то, которое я хотел (1600x1200). Я надеюсь, что исправление, которое я нашел (и описал в связанном ответе), будет применимо аналогично вашей проблеме.

У меня была такая же проблема на моем MacBook Pro в середине 2014 года (11,1) под управлением Xenial. Я перепробовал все вышеупомянутые решения в различных формах, но неизменно приводил к тому, что X переходил в безотказный режим с низкой графикой (но отображался в том самом разрешении, которое я хотел установить по умолчанию не меньше.

Оказывается, после долгих споров по форумам и поисковикам я забыл самое простое и потенциальное решение по умолчанию: nomodeset. Это решило проблему.

TL; DR: не забудьте попробовать nomodeset! Особенно на MacbookPro 11,1.

Я создал этот скрипт, чтобы сделать его более динамичным (несколько рабочих мест / разные мониторы).

Только раздражение: когда вы входите из lightdm, экран все еще мигает, как будто он хочет изменить разрешение:s

Другие вопросы по тегам