Неправильне дозвіл екрана входу


44

За випадкових випадків, як правило, після неправильного перезавантаження мого комп'ютера, роздільна здатність екрана для входу не є за замовчуванням 1440x900, але я думаю, 1600x900. Тепер у мене є цей монітор, який дуже погано поводиться з резолюціями, з якими він не розроблений, і він покаже дурне поле "неправильної роздільної здатності", що стрибає по екрану.

Чи є спосіб змусити екран для входу в систему роздільною здатністю 1440х900 незалежно від того? Я запускаю Ubuntu 11.10 з Unity та LightDM.


Для мене з усіх рішень тільки цей працював у 18.04 під управлінням lightdm: askubuntu.com/questions/507726/…
Таккат

Відповіді:


40

Ви можете зробити сценарій для цього (джерело LightDM Resolution ).

  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. Відкрийте конфіденційний файл lightdm:

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

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

Тепер перезавантажте, і це повинно встановити правильну роздільну здатність на екрані входу в lightdm.

(ці вказівки можуть виглядати довгими, але зовсім не забирають довго)


1
Дякую! Я використовую сценарій Леона, згаданий нижче. askubuntu.com/a/88882/28071
beanaroo

Це хороший сценарій, думаю, я буду зберігати це для подальшого використання!
капітан_Г

На жаль, це просто ламає речі в Ubuntu 13.04. Можливо, тому, що вони вносили якісь масові зміни в ОС.
Патрік

Також не працює з драйвером Ubuntu 13.10 + NVIDIA 319: Сценарій виконується, але роздільна здатність не змінюється - можливо, через те, що драйвер NVIDIA перевищує його.
лектор

Я думаю, що так і має бути chown root:root?
Сила Водолія

38

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

Я просто скопію звідси

  1. увійти
  2. використовувати xrandr або утиліту управління Displays для налаштування моніторів, як ви хочете, щоб вони були налаштовані на екрані входу
  3. скопіюйте ~ / .config / monitors.xml в /var/lib/lightdm/.config

Оскільки у мене вже були правильно налаштовані монітори, я просто повинен був зробити крок 3.

Деякі інші відповіді, наведені тут, працювали для мене, але лише в конкретному сценарії, в той час як ризик використання непридатної системи в інших сценаріях (ПОМИЛКА НИСКОГО ГРАФІЧНОГО режиму). Наприклад, із постійно підключеним зовнішнім монітором (відповідь прийнято @captain_G) або завжди із тим самим пристроєм, підключеним до виводу, що використовується для зовнішнього монітора (сценарій від @Axlrod). Здається, що відповідь @ MarcoV є найбільш загальним рішенням, однак воно все ж включає правила сценаріїв.


4
Набагато простіше, ніж інші відповіді ... Цікаво, чому у неї немає більше голосів. Що ж, у мене є.
аап

Потім знову, хоча це допомагає екрану входу, було б непогано, якби іншим користувачам не довелося знову встановлювати роздільну здатність екрана.
аап

3
Замість того, щоб копіювати файл, створіть посилання на нього, щоб воно автоматично оновлювалось щоразу, коли ви змінювали налаштування екрана: $ sudo ln ~/.config/monitors.xml /var/lib/lightdm/.config/monitors.xml(Ні, символічні посилання НЕ працюють.)
Nathan JB

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 не запуститься.


Привіт, ваші xrandкоманди говорять:warning: output default not found; ignoring
SebMa

@SebMa Ви повинні використовувати правильну назву виводу!
Кен Шарп

2

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

запустити:

xrandr

Отримати пристрої, якими ви користуєтесь ноутбуком, зазвичай є LVDS1, і для мене у мене є DP2 (дисплей 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).

#! / бін / баш
LVDS = "LVDS-0"
PRIMARY = "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); робити
        дозвіл = `get_resolution $ display`

        [[$ display == $ PRIMARY]] && arg = "- первинний";
        [[-n $ дозвіл]] && mode = "- режим $ роздільна здатність";

        якщо [[$ display == $ LVDS]]; тоді
                xrandr - output $ display - off
        elif [[-n $ mode]]; тоді
                xrandr - вихідний показ $ режим $ 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 для мене більше не працює. Вказавши бажану роздільну здатність, як цю, виправили це для мене.
jropella

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, тому сподіваюся, що я написав гідні речі.


0

Не спілкуйтесь зі скриптами чи конфігураційними файлами, які мають можливість зробити ваш екран входу непридатним!

Замість цього увійдіть та встановіть бажані налаштування екрана * та виконайте цю команду:

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

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

* Не забудьте натиснути «Застосувати»


Це працює, але це другорядне. Він виконує звичайне навантаження в максимальній роздільній здатності, а потім переходить до ваших налаштувань. Як можна змусити його завантажити правильну роздільну здатність для початку?
Годдард

0

Сценарій Аксельрода є дефектним, тому що привід для "підключеного" також захоплює всі "відключені" дисплеї ... не те, що ми хочемо ...

Більше того, використання грепа з awk та хвостом тощо тощо є марно крутим, і я пропоную наступне. Крім того, у 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

Якщо ви використовуєте привітання GTD LightDM, ви можете запустити, xrandr -qщоб знайти імена моніторів, а потім відредагувати /etc/lightdm/lightdm-gtk-greeterта встановити властивість, active-monitorяк описано в коментарях всередині цього файлу. Ця властивість може приймати декілька впорядкованих значень, у тому числі #cursorдля монітора, який наразі показує курсор миші.


0

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


-1

Проблема може бути "бажаними режимами екрана"

Я припускаю, що ваш монітор повідомляє про високу роздільну здатність екрана як про переважне. Тепер ви хочете замінити цей параметр за замовчуванням . Дивіться мою відповідь на дуже схоже запитання, щоб отримати детальну інформацію про те, як це можна зробити.

У мене була протилежна проблема: я завжди отримував меншу роздільну здатність екрана (1280x1024), ніж ту, яку я хотів (1600x1200). Знайдене нами виправлення (і описане у пов'язаній відповіді), сподіваємось, буде застосувати аналогічно до вашої проблеми.


Хто б не проголосував мою відповідь, чи не могли б ви додати примітку, чому ви вважаєте, що ця відповідь не корисна?
Chriki

-2

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

Після довгих роздумів по форумах і гуглінгу виявляється, що я забув найпростіший і за замовчуванням потенційне рішення: nomodeset. Це вирішило проблему.

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


-3

Я створив цей сценарій, щоб зробити його більш динамічним (кілька робочих просторів / різні монітори).

Лише роздратування: коли ви входите з lightdm, екран все ще блимає так, як він хоче змінити роздільну здатність: s


1
Пасти не знайдено.
Тобольд

Дійсно; якщо у вас все ще є локальна копія сценарію, будь ласка, повторно завантажте його.
wchargin

1
Я завантажив сценарій до github. Я не знаю, чому paste.ubuntu.com видалив його :(
Леон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.