Як змусити кілька моніторів виправити роздільну здатність LightDM?


17

На мене впливає помилка: https://bugs.launchpad.net/ubuntu/+source/unity-greeter/+bug/874241 В іншому випадку, якщо ви, як і я, у вас є ноутбук, підключений до другого монітора вищої роздільної здатності, LIGHTDM на на етапі входу, відображає відображення на обох екранах і призначає їм загальну роздільну здатність (1024X768) у моєму випадку, замість того, щоб розширювати робочий стіл (Первинний екран із привітанням та вторинний із лише логотипом, як згадується у книзі специфікацій декількох моніторів UX за 12.04).

Ось мій xrandr -q

@L502X:~$ xrandr -q
Screen 0: minimum 320 x 200, current 1920 x 1848, maximum 8192 x 8192
LVDS1 connected 1366x768+309+1080 (normal left inverted right x axis y axis) 344mm x 193mm
   1366x768       60.0*+
   1360x768       59.8     60.0  
   1024x768       60.0  
   800x600        60.3     56.2  
   640x480        59.9  
VGA1 disconnected (normal left inverted right x axis y axis)
HDMI1 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 510mm x 287mm
   1920x1080      60.0*+
   1600x1200      60.0  
   1680x1050      60.0  
   1280x1024      60.0  
   1440x900       59.9  
   1280x960       60.0  
   1280x800       59.8  
   1024x768       60.0  
   800x600        60.3     56.2  
   640x480        60.0  
DP1 disconnected (normal left inverted right x axis y axis)

Я намагався змусити lightdm виконати деякі команди xrandr, щоб встановити правильну роздільну здатність для кожного монітора та розширити робочий стіл, тому я створив простий скрипт з назвою /usr/share/lightdmxrand.sh :

#!/bin/sh
xrandr --output HDMI1 --primary --mode 1920x1080 --output LVDS1 --mode 1366x768 --below HDMI1

І сказав lightdm запустити його: /etc/lightdm/lightdm.conf

[SeatDefaults]
greeter-session=unity-greeter
user-session=ubuntu
greeter-setup-script=/usr/bin/numlockx on
display-setup-script=/usr/share/lightdmxrandr.sh

перезапущений lightdm: sudo restart lightdm І екран входу привітання єдності був правильним. Екрани з відповідними правильними роздільними здатностями, і якщо я переміщу мишу на екран, він отримує фокус із полем для входу та панеллю, тоді як на нефокусованому екрані просто відображається логотип Ubuntu (Так само, як зазначено в книзі специфікацій MM UX). Фантастичний!

Таке рішення працює чудово, якщо зовнішній монітор підключений до ноутбука. У ситуації, коли він не підключений, на етапі входу я отримую: ПОМИЛКА РЕЖИМ НИЗЬКОГО ГРАФІКИ (Ви працюєте в режимі низької графіки, ваш екран, пристрої введення ... не виявлено ..). Звичайна, тому що xrandrнамагається вивести на не підключений монітор.

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

If (xrandr -q | grep 'HDMI1 connected') != NULL (HDMI1 is connected )
then xrandr --output HDMI1 --primary --mode 1920x1080 --output LVDS1 --mode 1366x768 --below HDMI1
else xrandr --output LVDS1 --mode 1366x768 (or do nothing - because the resolution of the laptop screen is correct when no external monitor is connected)

Заздалегідь спасибі.

Відповіді:


18

ПРИМІТКА. Цю відповідь я також розмістив тут

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

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

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

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


9

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

 (Parse the output of `XRAND -q` command, 
identify the connected devices, 
grab their first/maximum resolutions 
and use `XRANDR --output` to display them). 

Тож якщо у когось є краще рішення чи більш загальний сценарій, він є людиною.

СКРИПТ:

    #!/bin/bash
    # V-1.0 by Hanynowsky - April 2012. 
    # I am a very basic script that works around bug 874241 repprted in launchpad.

    XCOM0=`xrandr -q | grep 'HDMI1 connected'`
    XCOM1=`xrandr --output HDMI1 --primary --mode 1920x1080 --output LVDS1 --mode 1366x768 --below HDMI1`
    XCOM2=`xrandr --output LVDS1 --mode 1366x768`
    # if the external monitor is connected, then we tell XRANDR to set up an extended desktop
    if [ -n "$XCOM0" ] || [ ! "$XCOM0" = "" ]; then echo $XCOM1
    # if the external monitor is disconnected, then we tell XRANDR to output only to the laptop screen
    else echo $XCOM2
    fi
    exit 0;

2

Велике спасибі Ганиновському! Пошук вашої відповіді врятував мене багато роботи (нещодавно оновлений 12.04). Однак у моєму випадку це не дало повного рішення, тому я хотів би додати те, що дізнався. У моїй установці був Samsung S22A300B, підключений до порту VGA Vaio VGN-CR120E із вбудованим дисплеєм 1280x800 та мобільним графічним контролером GM965 / GL960.

Коротко те, що я знайшов:

  • Максимальна роздільна здатність, яку я могла встановити на зовнішньому дисплеї Samsung за допомогою системних налаштувань дисплеїв, була 1024x768.
  • Це, мабуть, було викликано, оскільки мій VGA-контролер не підтримує EDID. Чомусь і Windows Vista, і Windows 7 (на іншому ноутбуці) можуть впоратися з цією ситуацією та надати повний спектр резолюцій.

Щоб подолати цю обмежену максимальну роздільну здатність, я зробив наступне:

  • До вашого сценарію додано рядки, щоб викликати xrandr за допомогою --newmode та --addmode
  • Спробував cvt для створення --newmode modeline для 1920x1080, але, на жаль, він не працював для моєї установки.
  • Позичив ноутбук з портом HDMI, завантажив його із підключеним Samsung та схопив модлін для 1920x1080 56,2 кГц із /var/log/Xorg.0.log
  • Підключено цей модуль разом із зміною сценарію для моєї настройки (наприклад, HDMI1-> VGA1, правильна роздільна здатність ноутбука тощо)

Цей ALMOST працював, але після входу зовнішній монітор було скинуто з хороших 1920x1080 назад на 1024x768. Виявилося, що це постійне налаштування користувача та його легко було виправити за допомогою системи "Показати ... Налаштування системи (з меню передач) до тепер доступних 1920x1080. Тепер, коли я завантажуюсь із підключеним зовнішнім монітором, все працює як очікувалося.

Ще один додатковий глюк: Якщо цей сценарій запускається двічі (наприклад, з терміналу), рядок xrandr --newmode отримає помилку "BadName (названого кольору чи шрифту не існує)", але /programming/ 851704 / xrandr-error-badname-name-color-or-font-does-not- пояснив це, і це здається доброякісним. Також не повинно виникнути проблем, коли сценарій підключений lightdm.conf відповідно до інструкцій Ганиновського проти запуску вручну.

Я надаю зміни, адаптовані до перелічених вище (VGA без функціональності EDID), сподіваючись, що це допоможе комусь іншому. Як було сказано в попередніх відповідях, вам доведеться адаптувати це для власної установки. Я не маю жодної хорошої поради щодо отримання правильної modline, але якщо хтось інший, будь ласка, підключіться.

#!/bin/bash
# Modified for Vaio with 1920x1080 external on VGA
XCOM0=`xrandr -q | grep 'VGA1 connected'`
XCOM1="xrandr --output VGA1 --primary --mode 1920x1080 --output LVDS1 --mode 1280x800 --left-of VGA1"
XCOM2="xrandr --output LVDS1 --mode 1280x800"
NEWMODE="xrandr --newmode "1920x1080" 148.50  1920 2448 2492 2640  1080 1084 1089 1125 +hsync +vsync"
ADDMODE="xrandr --addmode VGA1 1920x1080"

# Always add this mode in case we need it (better would be to test first)
eval $NEWMODE
eval $ADDMODE

if [ -n "$XCOM0" ] || [ ! "$XCOM0" = "" ];
then
        # if the external monitor is connected, then we tell XRANDR to set up an extended desktop
        eval $XCOM1
else
        # if the external monitor is disconnected, then we tell XRANDR to output only to the laptop screen
        eval $XCOM2
fi
exit 0;

ПРИМІТКА. Я не впевнений, чи потрібен евал (проти відлуння в оригіналі). Я поставив це перед тим, як виявив, що мої параметри "Дисплеї ..." скинули зовнішній дисплей до нижчої роздільної здатності.


Вітаємо Вас @Walter Wittel & дякуємо за Ваш цінний внесок. Як тільки я встигну, я спробую розібратися, якщо це можливо, більш загальний сценарій; але я сумніваюся, що вдасться витягти правильну модулію для монітора, що не належить EDID, використовуючи XRANDR. У будь-якому разі, давайте подивимось.
Ганиновський

1

Я виявив, що замість використання --mode для явної постановки резолюції, --auto вибере найкращу роздільну здатність для вас (найбільшу, яку я вважаю).

#!/bin/bash

XCOM0=`xrandr -q | grep 'VGA1 connected'`
XCOM1=`xrandr --output LVDS1 --primary --auto --output VGA1 --auto --right-of LVDS1`
XCOM2=`xrandr --output LVDS1 --primary --auto`
# if the external monitor is connected, then we tell XRANDR to set up an extended desktop
if [ -n "$XCOM0" ] || [ ! "$XCOM0" = "" ]; then echo $XCOM1
# if the external monitor is disconnected, then we tell XRANDR to output only to the laptop screen
else echo $XCOM2
fi

exit 0;

1
хачі ваш сценарій чудово працює! Кожен, хто постраждав від цієї помилки, просто повинен поставити правильну роздільну здатність своїх дисплеїв у цьому сценарії та перезапустити lightdm: sudo перезапустити lightdm ось все! Все чудово працює! Я відповідав на моє запитання про цю проблему тут: askubuntu.com/questions/181112 / ...
conscientist

0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.