Неправильное разрешение экрана входа
В некоторых случаях, обычно после неправильной перезагрузки компьютера, разрешение экрана входа в систему не соответствует стандартному 1440x900, но я думаю, что 1600x900. Теперь у меня есть этот монитор, который действительно плохо справляется с разрешениями, которые он не предназначен для обработки, и будет показывать глупое окно "неправильного разрешения", прыгающее по экрану.
Есть ли способ заставить экран входа в систему загружать разрешение 1440x900, несмотря ни на что? Я использую Ubuntu 11.10 с Unity и LightDM.
17 ответов
Вы можете сделать скрипт для этого (исходное разрешение LightDM).
- Во-первых, нам нужно выяснить, каков идентификатор вашего монитора. Откройте терминал, начните печатать
terminal
в вашем единстве, чтобы увидеть опцию или нажмите Ctrl+Alt+T Введите / скопируйте эту команду, чтобы показать детали вашего дисплея:
xrandr -q
Если у вас только один монитор, вы увидите строку в выводе, подобную следующей (возможно, с некоторыми другими значениями, это идентификатор в начале, за которым мы следуем):
DVI-0 connected 1680x1050+0+0 (normal left inverted right x axis y axis) 473mm x 296mm
Идентификатор экрана в этом случае DVI-0
Откройте ваш любимый текстовый редактор, давайте используем Gedit для этого примера, нажмите Alt+F2 и введите
gedit
Введите / скопируйте это в:
#!/bin/sh xrandr --output DVI-0 --primary --mode 1440x900
Сохраните это на рабочем столе как
lightdmxrandr.sh
Возможно, вы захотите проверить сценарий, прежде чем мы применим его на практике. Вернувшись в терминал, перейдите туда, где мы его только что сохранили:
cd ~/Desktop
Теперь нам нужно сделать его исполняемым:
chmod a+rx lightdmxrandr.sh
Теперь запустите это:
./lightdmxrandr.sh
(Если ваш экран автоматически корректируется после входа в систему, вы, вероятно, не увидите различий, поэтому вы можете использовать тестовое разрешение, которое отличается, но вы знаете, что работает во время тестирования)
Теперь давайте переместим маленький скрипт, который мы сделали:
sudo mv ~/Desktop/lightdmxrandr.sh /usr/share/.
Если вы не используете
sudo
Вы можете получить ошибку разрешения (я использую эту папку из личных предпочтений)Теперь нам нужно запустить это в lightdm, перейдите в правильную папку:
cd /etc/lightdm
Откройте файл conf lightdm:
sudo gedit lightdm.conf
Теперь добавьте инструкцию для запуска вашего скрипта после последней строки и сохраните:
display-setup-script=/usr/share/lightdmxrandr.sh
Теперь перезагрузите компьютер и установите правильное разрешение на экране входа в систему lightdm.
(эти инструкции могут выглядеть долго, но совсем не долго)
Я нашел очень простой обходной путь, который отлично работает для меня, запустив 13.04. (обновление: теперь 13.10) на ноутбуке с 24-дюймовым внешним экраном, который не подключен постоянно.
Я просто скопирую отсюда
- авторизоваться
- используйте xrandr или утилиту управления дисплеями, чтобы настроить мониторы так, как вы хотите, чтобы они настраивались на экране входа
- скопируйте ~/.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