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

44

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

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

Рубен Баккер
источник
Для меня из всех решений в 18.04 работал только этот, работающий на lightdm: askubuntu.com/questions/507726/…
Таккат

Ответы:

40

Вы можете сделать скрипт для этого (исходное разрешение 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.

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

captain_G
источник
1
Благодарность! Я использую сценарий Леона, упомянутый ниже. askubuntu.com/a/88882/28071
beanaroo
Это хороший сценарий, думаю, я сохраню его для будущего использования!
captain_G
К сожалению, это просто ломает вещи в Ubuntu 13.04. Вероятно, потому что они вносили некоторые массивные изменения в ОС.
Патрик
Также не работает с Ubuntu 13.10 + драйвер NVIDIA 319. Сценарий выполняется, но разрешение не меняется - возможно, потому что драйвер NVIDIA переопределяет его.
спикер
Я думаю, что это должно быть chown root:rootтакже?
Водолей Сила
38

Я нашел очень простой обходной путь, который отлично работает для меня, запустив 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 является наиболее общим решением, однако оно все еще включает правила написания сценариев.

Tobold
источник
4
Гораздо проще, чем другие ответы ... Интересно, почему у него нет больше голосов. Ну, это мое.
аап
С другой стороны, хотя это и помогает экрану входа в систему, было бы неплохо, если бы другим пользователям не пришлось снова настраивать разрешение экрана.
аап
3
Вместо того, чтобы копировать файл, создайте ссылку на него, чтобы он автоматически обновлялся при каждом изменении настроек экрана: $ sudo ln ~/.config/monitors.xml /var/lib/lightdm/.config/monitors.xml(Нет, символические ссылки НЕ работают.)
Натан Дж. Б.
3
Какое приложение пишет / обновляет monitors.xml? Я использую XFCE, и этому файлу 2 года, и он полностью устарел. Я не могу найти похожий файл.
Scai
1
Это правильный подход, в отличие от создания сценария для изменения разрешения. .config / monitors.xml может поддерживать настройку нескольких мониторов (т. е. ваши настройки при работе с док-станцией и 2 мониторами по сравнению с настройкой дома без док-станции и 1 внешнего монитора). Создание ручного сценария для установки разрешения было бы относительно более сложным.
Ияд К
20

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

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

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

Eugeniy
источник
Привет, ваши xrandкоманды говорят:warning: output default not found; ignoring
SebMa
@SebMa Вы должны использовать правильное имя выхода!
Кен Шарп
2

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

бег:

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-скрипт.

Алекс Р
источник
2

Просто немного улучшил сценарий 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;
сделанный
Икко
источник
1
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. Он устанавливает предпочтительное разрешение, и для меня он позволяет мне устанавливать разрешение экрана входа в систему, вместо того, чтобы использовать по умолчанию максимальное поддерживаемое разрешение.

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

Майкл Фарадей
источник
1
После установки open-vm-tools и open-vm-tools-desktop копирование monitors.xml в /var/lib/lightdm/.config больше не работало для меня. Указание предпочтительного разрешения, как это, исправило его для меня.
Джропелла
1

То, что я нашел полезным, было сообщение на веб-сайте руководства 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, так что надеюсь, что я написал достойные вещи.

Valinux
источник
0

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

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

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

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

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

Натан Дж. Б.
источник
Это работает, но это вторично. Он выполняет обычную загрузку в максимальном разрешении, а затем переключается на ваши настройки. Как вы можете заставить его загрузить правильное разрешение для запуска?
Годдард
0

Сценарий Аксельрода несколько неисправен, так как 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;
блейк
источник
0

Вот так у меня это работает в 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

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

Майкл Фарадей
источник
0

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

Дзамо Нортон
источник
0

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

криптозоолог
источник
-1

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

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

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

Chriki
источник
Кто бы ни проголосовал за мой ответ, не могли бы вы добавить примечание, почему вы считаете этот ответ бесполезным?
Чрики
-2

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

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

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

IanGa
источник
-3

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

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

Леон
источник
1
Паста не найдена.
Тобольд
Верно; если у вас все еще есть локальная копия скрипта, рассмотрите возможность его повторной загрузки.
wchargin
1
Я загрузил скрипт в github. Я не знаю, почему paste.ubuntu.com удалил это :(
Леон