Неправильное Разрешение Экрана Входа в Систему

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

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

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

  1. Во-первых, нам нужно выяснить, каков идентификатор вашего монитора. Откройте терминал, начните вводить текст terminal в вашем unity dash, чтобы увидеть опцию, или нажмите 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/shxrandr --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. Откройте файл lightdm conf:

    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.

Некоторые другие ответы, приведенные здесь, сработали для меня, но только в определенном сценарии, в то время как в других сценариях существует риск непригодности системы (ОШИБКА НИЗКОГО ГРАФИЧЕСКОГО РЕЖИМА). Например, с постоянно подключенным внешним монитором (принятый ответ @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/bashmode="$(xrandr -q|grep -A1 "DP2 connected"| tail -1 |awk '{ print $1 }')"if [ -n "$mode" ]; then  xrandr --output LVDS1 --off  xrandr --output DP2 --primary --mode 2540x1440fi

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

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

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

chmod +x скрипт

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

Добавь

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

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

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

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

Просто немного улучшил вышесказанное Сценарий Аксельрода.

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

#!/bin/bashLVDS="LVDS-0"PRIMARY="VGA-0"функция get_displays(){ xrandr -q | grep connected | awk '{print $1}'}функция get_resolution(){ [[ -z "$1" ]] && возвращает 0 || xrandr -q | grep -A1 $1 | tail -1 | awk '{print $1}' | grep -e "^[0-9]"}для отображения в $(get_displays); do resolution=`get_resolution $display`        [[ $display == $PRIMARY ]] && arg="--primary"; [[ -n $resolution ]] && mode="--mode $resolution"; если [[ $display == $LVDS ]]; тогда xrandr --вывод $display --выкл elif [[ -n $mode ]]; затем xrandr --output $display $arg $mode - сбросить разрешение arg mode;готово

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

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

sudo gedit /etc/default/grub

Загрузка текстового редактора может занять некоторое время. Как только он загрузился, я отредактировал строку

GRUB_GFXMODE=1024x768

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

GRUB_GFXMODE=1440x900

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

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

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

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

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

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

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

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

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

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

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

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

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

Более того, используя grep с awk и tail, etc...is расточительно обходной путь, и в этой связи я бы предложил следующее. Кроме того, в 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;

Для меня из всех решений только это работало в 18.04 под управлением lightdm: 14.04 - Gnome shell can't save screen resolution - Ask Ubuntu