Birden Çok Monitörü LightDM için doğru çözünürlüklere nasıl zorlarım?


17

Ben BUG etkileniyorum: https://bugs.launchpad.net/ubuntu/+source/unity-greeter/+bug/874241 Aksi halde, benim gibi yüksek çözünürlük, ikinci monitöre bağlı bir bilgisayarınız varsa LIGHTDM de giriş aşaması, ekranları her iki ekranda da yansıtır ve masaüstümü genişletmek yerine (Çoklu ekran UX teknik özellik kitabında belirtildiği gibi sadece bir logo ile ikincil ekran ve karşılayıcı ile ikincil ekran) benim durumumda ortak bir çözünürlük (1024X768) atar 12.04 için).

İşte benim 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)

Her monitör için doğru çözünürlüğü ayarlamak ve masaüstünü genişletmek için lightdm'yi bazı xrandr komutlarını yürütmeye zorlamaya çalıştım, bu yüzden /usr/share/lightdmxrand.sh adlı basit bir komut dosyası oluşturdum :

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

Ve lightdm'ye çalıştırmasını söyledi: /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 yeniden başlatıldı: sudo restart lightdm Ve birlik karşılama giriş ekranı doğruydu. İlgili çözünürlükleri olan ekranlar ve fareyi bir ekrana hareket ettirirsem, odaklanmamış ekran sadece bir Ubuntu Logosu görüntülerken (MM UX spesifikasyon kitabında belirtildiği gibi). Fantastik!

Harici monitör dizüstü bilgisayara bağlı olduğu sürece bu geçici çözüm harika çalışır. Bağlı olmadığı durumda, giriş aşamasında, şunu elde ederim: DÜŞÜK GRAFİK MOD HATASI (Düşük grafik modunda çalışıyorsunuz, ekranınız, giriş aygıtlarınız ... algılanmadı ..). Normal, çünkü xrandrbağlı olmayan bir monitöre çıkış yapmaya çalışır.

Buradaki soru , betiği harici monitör bağlı olmadığında xrandryalnızca dizüstü bilgisayar ekranına çıkış yapacak ve herhangi bir harici monitörü yok sayacak şekilde nasıl değiştirmem gerektiğidir . ÖRNEĞİN:

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)

Şimdiden teşekkürler.

Yanıtlar:


18

NOT: Bu yanıtı burada da gönderdim

13.04 çalıştıran benim için mükemmel çalışan çok basit bir çözüm buldum. sürekli bağlı olmayan 24 inç harici ekrana sahip bir dizüstü bilgisayarda.

Sadece buradan kopyalayacağım

  1. oturum aç
  2. monitörlerinizi giriş ekranında nasıl yapılandırılmasını istediğinizi yapılandırmak için xrandr veya Ekranlar kontrol yardımcı programını kullanın
  3. sudo cp ~/.config/monitors.xml /var/lib/lightdm/.config/

Monitörlerimi zaten doğru yapılandırdığım için 3. adımı yapmak zorunda kaldım.


9

Soruma cevap veren bu küçük temel senaryoyu aşağıda başardım. Harici monitör bağlı olsun ya da olmasın, Lightdm karşılama aşamasında doğru çözünürlükleri kullanıyor. Bununla birlikte, aynı komut dosyasının , kullanıcının dizüstü bilgisayar ve monitör ekranlarının manuel çözünürlüklerini belirtmesine gerek kalmayacak şekilde genel olacak şekilde değiştirilmesi gerekir.

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

Yani birisinin daha iyi bir çözümü veya daha genel bir senaryosu varsa, o adamdır.

SENARYO:

    #!/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

Çok teşekkürler Hanynowsky! Cevabınızı bulmak beni bir ton işten kurtardı (son zamanlarda 12.04'e yükseltildi). Ancak benim durumumda tam bir çözüm sunmadı, bu yüzden öğrendiklerimi eklemek istiyorum. Kurulumum, bir Vaio VGN-CR120E'nin VGA portuna dahili 1280x800 ekran ve Mobil GM965 / GL960 Tümleşik Grafik Denetleyici ile takılı bir Samsung S22A300B idi.

Kısaca bulduğum şey:

  • Ekran Sistem Ayarını kullanarak harici Samsung ekranında ayarlayabileceğim maksimum çözünürlük 1024x768 idi.
  • Görünüşe göre bu, VGA denetleyicim EDID'yi desteklemediğinden kaynaklandı. Herhangi bir nedenle hem Windows Vista hem de Windows 7 (farklı bir dizüstü bilgisayarda) bu durumu halledebilir ve çok çeşitli çözünürlükler sağlayabilir.

Bu sınırlı maksimum çözünürlüğü geçici olarak çözmek için aşağıdakileri yaptım:

  • Xrandr'ı --newmode ve --addmode ile çağırmak için komut dosyanıza satırlar eklendi
  • Cvt'yi 1920x1080 için --newmode modelini üretmeye çalıştı, ancak maalesef kurulumumda işe yaramadı.
  • HDMI bağlantı noktasına sahip bir dizüstü bilgisayar ödünç aldı, Samsung takılıyken önyüklendi ve /var/log/Xorg.0.log dışında 1920x1080 56.2 kHz modline yakaladı.
  • Bu modline, kurulumum için komut dosyanızı değiştirmeyle birlikte takıldı (örn. HDMI1-> VGA1, doğru dizüstü bilgisayar çözünürlüğü vb.)

Bu ALMOST çalıştı, ancak oturum açtıktan sonra harici monitör güzel bir 1920x1080'den 1024x768'e sıfırlandı. Bunun kalıcı bir kullanıcı ayarı olduğu ortaya çıktı ve Ekranlar ... Sistem Ayarı (dişli menüsünden) mevcut olan 1920x1080'e kolayca sabitlendi. Şimdi harici monitör bağlıyken önyükleme yaptığımda her şey beklendiği gibi çalışıyor.

Bir ek aksaklık: Bu komut dosyası iki kez çalıştırılırsa (örneğin terminalden) xrandr - newmode satırı "BadName (adlandırılan renk veya yazı tipi yok)" hatası alır, ancak /programming/ 851704 / xrandr-error-badname-adlı-renk-veya-font-yok-var-bunu açıkladı ve iyi huylu görünüyor. Komut dosyası Hanynowsky'nin talimatlarına göre lightdm.conf bağlandığında ve manuel olarak çalıştırıldığında da sorun olmamalıdır.

Başkalarına yardımcı olacağını umarak yukarıdaki (EDID işlevselliği olmayan VGA) için uyarlanmış değişiklikler sağlıyorum. Önceki cevaplarda belirtildiği gibi, bunu kendi kurulumunuza uyarlamanız gerekecektir. Doğru modline ulaşmak için iyi bir tavsiyem yok, ancak başka biri varsa lütfen içeri girin.

#!/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;

NOT: Değerlendirmenin gerekli olup olmadığından emin değilim (orijinaldeki yankıya karşı). Ekranlarım ... ayarlarımın harici ekranı daha düşük bir çözünürlüğe sıfırladığını keşfetmeden önce bunu taktım.


@Walter Wittel'e hoş geldiniz. Değerli katkınız için teşekkür ederiz. Zamanım olduğunda mümkünse daha genel bir senaryo bulmaya çalışacağım; ancak XRANDR kullanarak EDID olmayan bir monitör için doğru mod hattının çıkarılmasının mümkün olabileceğinden şüpheliyim. Her neyse, bakalım.
Hanynowsky

1

Çözünürlüğü açıkça belirtmek için --mode kullanmak yerine --auto'nun sizin için en iyi çözünürlüğü (inandığım en büyük çözünürlük) seçeceğini buldum.

#!/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
hachi betiğin harika çalışıyor! Bu hatadan etkilenen herkes, bu komut dosyasında ekranlarının doğru çözünürlüğünü koymalı ve lightdm: sudo restart lightdm thats all'ı yeniden başlatmalıdır! Her şey harika çalışıyor! Bu sorunla ilgili sorumu
vicdani

0

LightDM'nin GTK karşılayıcısını kullanıyorsanız xrandr -q, monitörlerinizin adlarını bulmak için çalışabilir , ardından özelliği düzenleyebilir /etc/lightdm/lightdm-gtk-greeterve active-monitorbu dosyadaki yorumlarda açıklandığı gibi ayarlayabilirsiniz . Bu özellik, #cursorşu anda fare imlecini gösteren monitör de dahil olmak üzere birden çok, sıralı değer alabilir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.