Почему мои изменения в lightdm.conf не влияют на разрешение экрана моего рабочего стола?

Я хотел изменить разрешение экрана моего рабочего стола на 1366x768, Но мой VESA drivers(AMD REDWOOD) не обнаружил это разрешение. Поэтому я создал сценарий оболочки следующим образом:

xrandr --newmode "1368x768_60.00"   85.25  1368 1440 1576 1784  768 771 781 798 -hsync +vsync  
xrandr --addmode DVI-0 1368x768_60.00  
xrandr --output DisplayPort-0 --off --output DVI-0 --mode 1368x768_60.00 --pos 0x0 --rotate normal --output HDMI-0 --off

Я сохранил как lightdmxrandr.sh в /usr/bin и сделал его исполняемым. Затем я добавил следующие строки в /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf (что является эквивалентом хорошо известного /etc/lightdm/lightdm.conf, Я использую файл выше, как я на 14.04, где нет /etc/lightdm/lightdm.conf.):-

greeter-session=unity-greeter  
display-setup-script=/usr/bin/lightdmxrandr.sh  
session-setup-script=/usr/bin/lightdmxrandr.sh

и сохранил это. Теоретически это должно было изменить как разрешение экрана входа в систему, так и разрешение экрана рабочего стола на 1366x768, Но на удивление это изменило только разрешение экрана входа в систему. Разрешение рабочего стола не изменилось. Позже я добавил скрипт в автозагрузку приложений, и это изменило разрешение моего рабочего стола.

Итак, я хочу знать, почему я сделал правки lightdm.conf файл (или, скорее, 50-ubuntu.conf файл) не повлияло на разрешение моего рабочего стола. Это какая-то ошибка, о которой нужно сообщать на панели запуска, или неправильно сказать, что изменения в lightdm повлияют на экран рабочего стола?

PS: - На мой взгляд, это не просто специфично для Ubuntu 14.04.

1 ответ

Решение

Я попробовал аналогичную вещь и после некоторой отладки, я думаю, я понял, что происходит. Ваш скрипт, вероятно , запущен и, возможно, правильно установил разрешение. Однако, поскольку он запускается менеджером входа в систему, он запускается до того, как Unity завершит настройку среды рабочего стола, и Unity считывает свои собственные настройки и сбрасывает разрешение до того, которое вы имели. Итак, я думаю, что то, что происходит, это:

  1. lightdm правильно запускает ваш скрипт
  2. Это устанавливает желаемое разрешение
  3. Unity запускает, читает свои настройки и возвращается к стандартному разрешению, которое у вас есть
  4. Ваше разрешение восходит к тому, что было раньше

Теперь это происходит из-за того, что драйвер VESA не определяет автоматически желаемое разрешение. Это означает, что когда вы изменяете разрешение из раздела "Дисплеи" настроек Unity, вы предоставляете ему разрешение, которое недоступно, пока вы не запустите xrandr команды. Поэтому это игнорируется при следующем перезапуске, и Unity возвращается к стандартному разрешению.

Итак, вам нужно сделать разрешение доступным для Unity, затем установить его по умолчанию и позволить ему обрабатывать его. Для этого необходимо сначала добавить эту строку в /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf:

session-setup-script=/usr/bin/lightdmxrandr.sh

Затем убедитесь, что /usr/bin/lightdmxrandr.sh выглядит так:

xrandr --newmode "1368x768_60.00"   85.25  1368 1440 1576 1784  768 771 781 798 -hsync +vsync  
xrandr --addmode DVI-0 1368x768_60.00  

Обратите внимание, что я на самом деле не устанавливаю разрешение, а только делаю его доступным. После того, как вы сделали этот перезапуск, войдите в систему. Теперь новое разрешение должно быть доступно в Настройках => Дисплеи. Если это так, выберите его там, выйдите и снова войдите в систему, и разрешение должно быть установлено правильно. Теперь оно должно сохраняться при перезагрузках.


Альтернативные подходы:

  1. Создать /etc/X11/xorg.conf файл, который перечисляет желаемое разрешение. Что-то вроде этого:

    Section "Monitor"
        Identifier    "Monitor0"
        Modeline "1368x768_60.00"  109.00  1280 1368 1496 1712  1024 1027 1034 1063 -hsync +vsync
    EndSection
    
    Section "Screen"
        Identifier     "Screen0"
        Device         "Card0"
        Monitor        "Monitor0"
        SubSection "Display"
            Modes       "1368x768_60.00"
        EndSubSection
    EndSection
    
    Section "Device"
        Identifier    "Card0"
        Driver        "vesa"
    EndSection
    
  2. Добавьте скрипт, который запускает xrandr команды для запуска приложений вашей сессии.

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