Как заставить несколько мониторов правильное разрешение для 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выводят только на экран ноутбука и игнорирует любой внешний монитор. НАПРИМЕР:

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 или утилиту управления дисплеями, чтобы настроить мониторы так, как вы хотите, чтобы они настраивались на экране входа
  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

Большое спасибо Hanynowsky! Поиск вашего ответа сэкономил мне массу работы (недавно обновлен 12.04). Однако в моем случае это не обеспечило полное решение, поэтому я хотел бы добавить то, что я узнал. Моя установка представляла собой Samsung S22A300B, подключенный к порту VGA Vaio VGN-CR120E со встроенным дисплеем 1280x800 и встроенным графическим контроллером Mobile GM965 / GL960.

Вкратце я нашел следующее:

  • Максимальное разрешение, которое я мог установить на внешнем дисплее Samsung, используя Системную настройку дисплеев, было 1024x768.
  • Это было очевидно вызвано, потому что мой контроллер VGA не поддерживает EDID. По какой-то причине Windows Vista и Windows 7 (на другом ноутбуке) могут справиться с этой ситуацией и предоставить полный диапазон разрешений.

Чтобы обойти это ограниченное максимальное разрешение, я сделал следующее:

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

Это ПОЧТИ работало, но после входа в систему внешний монитор был сброшен с хороших 1920x1080 обратно до 1024x768. Оказалось, что это был постоянный пользовательский параметр, который можно было легко исправить с помощью настройки системы «Дисплеи ...» (из меню «Передача»), которая теперь доступна для 1920x1080. Теперь при загрузке с подключенным внешним монитором все работает как положено.

Еще один глюк: если этот скрипт запускается дважды (например, из терминала), строка xrandr --newmode получит ошибку «BadName (именованный цвет или шрифт не существует)», но /programming/ 851704 / xrandr-errors-badname-named-color-or-font-not-Существуют объяснил это, и это кажется доброкачественным. Также не должно быть проблем, когда скрипт подключен lightdm.conf согласно инструкциям Hanynowsky вместо запуска вручную.

Я предоставляю изменения, адаптированные для вышеуказанного (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;

ПРИМЕЧАНИЕ: я не уверен, нужен ли eval (по сравнению с echo в оригинале). Я вставил это до того, как обнаружил, что мои настройки «Дисплеи ...» сбрасывали внешний дисплей с более низким разрешением.


Добро пожаловать @Walter Wittel и спасибо за ваш ценный вклад. Когда у меня будет время, я постараюсь найти более общий сценарий, если это возможно; но я сомневаюсь, что было бы возможно извлечь правильный modline для монитора без EDID, используя XRANDR. Во всяком случае, посмотрим.
Hanynowsky

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 restart lightdm и все! Все отлично работает! Я отвечал на мой вопрос об этой проблеме здесь: askubuntu.com/questions/181112/...
conscientist

0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.