Как вызвать корректные разрешения Нескольких Мониторов для LightDM?

Я затронут ОШИБКОЙ: https://bugs.launchpad.net/ubuntu / + source/unity-greeter / + ошибка/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 (Столь же указанный в книге спецификации UX MM).Фантастика!

Это обходное решение работает отлично, пока внешний монитор подключен к ноутбуку. В ситуации, где это не соединено на этапе входа в систему, я добираюсь: НИЗКАЯ ОШИБКА ГРАФИЧЕСКОГО РЕЖИМА (Вы работаете в низком графическом режиме, Вашем экране, устройства ввода данных... не стали обнаруженными..). Нормальный, потому что 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
задан 9 April 2012 в 07:17

5 ответов

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

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

Так что, если у кого-то есть лучшее решение. или более общий сценарий, он человек.

SCRIPT:

    #!/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;
9
ответ дан 9 April 2012 в 07:17

ПРИМЕЧАНИЕ. Я также разместил этот ответ здесь

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

Я просто скопирую из здесь

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

Так как мои мониторы уже были настроены правильно, мне просто нужно было сделать шаг 3.

18
ответ дан 9 April 2012 в 07:17

Я обнаружил, что вместо использования --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
ответ дан 9 April 2012 в 07:17

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

0
ответ дан 9 April 2012 в 07:17

Большое спасибо Ханиновскому! Поиск вашего ответа сэкономил мне массу работы (недавно обновлен до 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 и взял модлайн для 1920х1080 56,2 кГц из /var/log/Xorg.0.log[12230 sizes Подключил модлайн вместе с изменением вашего скрипта для моей настройки (например, HDMI1-> VGA1,правильное разрешение ноутбука и т. д.)

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

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

Я предоставляю изменения, адаптированные для вышеупомянутого (VGA без функции EDID) в надежде, что это поможет кто-то еще. Как упоминалось в предыдущих ответах, вам придется адаптировать это для своей собственной настройки. У меня нет хороших советов по получению правильной модлайн, но если кто-то еще есть, пожалуйста, вмешайтесь.

#!/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 в оригинале). Я вставил это до того, как обнаружил, что мои Дисплеи ... настройки сбрасывали внешний дисплей на более низкое разрешение.

2
ответ дан 9 April 2012 в 07:17

Другие вопросы по тегам:

Похожие вопросы: