다중 모니터가 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 또는 디스플레이 제어 유틸리티를 사용하여 로그인 화면에서 모니터를 구성 할 방법을 모니터하십시오
  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). 그러나 제 경우에는 완벽한 솔루션을 제공하지 않았으므로 배운 것을 추가하고 싶습니다. 내 설정은 내장 1280x800 디스플레이와 모바일 GM965 / GL960 통합 그래픽 컨트롤러가있는 Vaio VGN-CR120E의 VGA 포트에 연결된 Samsung S22A300B입니다.

내가 찾은 것은 다음과 같습니다.

  • 디스플레이 시스템 설정을 사용하여 외부 Samsung 디스플레이에서 설정할 수있는 최대 해상도는 1024x768입니다.
  • VGA 컨트롤러가 EDID를 지원하지 않기 때문에 발생하는 것 같습니다. 어떤 이유로 Windows Vista와 Windows 7 (다른 랩톱에 있음)이이 상황을 처리하고 전체 범위의 해상도를 제공 할 수 있습니다.

이 제한된 최대 해상도를 해결하기 위해 다음을 수행했습니다.

  • --newmode 및 --addmode를 사용하여 xrandr를 호출하기 위해 스크립트에 행을 추가했습니다.
  • 1920x1080의 --newmode 모델을 생성하기 위해 cvt를 시도했지만 불행히도 내 설정에서 작동하지 않았습니다.
  • HDMI 포트가있는 랩톱을 빌려 삼성이 연결 한 상태에서 부팅 한 후 /var/log/Xorg.0.log에서 1920x1080 56.2 kHz의 모드 라인을 가져 왔습니다.
  • 설정에 대한 스크립트 수정 (예 : HDMI1-> VGA1, 올바른 랩톱 해상도 등)과 함께 해당 모드를 연결했습니다.

이 ALMOST는 효과가 있었지만 로그온 후 외부 모니터는 멋진 1920x1080에서 1024x768로 다시 설정되었습니다. 이것은 영구적 인 사용자 설정이며 기어 메뉴에서 디스플레이 ... 시스템 설정을 사용하여 현재 사용 가능한 1920x1080으로 쉽게 수정되었습니다. 이제 외부 모니터가 연결된 상태에서 부팅하면 모든 것이 예상대로 작동합니다.

하나의 추가 결함 :이 스크립트가 터미널에서 두 번 실행되면 (예 : 터미널에서) xrandr --newmode 행에 "BadName (이름이 지정된 색상 또는 글꼴이 없음)"오류가 발생하지만 /programming/ 851704 / xrandr-errors-badname-named-color-or-font-es-es-lesss 는 이것을 설명 하지 않았 으며 양성으로 보입니다. 스크립트가 Hanynowsky의 지침에 따라 lightdm.conf에 연결되어 있고 수동으로 실행되는 경우에도 문제가되지 않습니다.

다른 사람에게 도움이되기를 희망하여 위의 (EDID 기능이없는 VGA)에 적합한 변경 사항을 제공하고 있습니다. 위의 답변에서 언급 했듯이이 설정을 자신의 설정에 맞게 조정해야합니다. 올바른 모드를 얻는 것에 대한 좋은 조언은 없지만 다른 사람이 있으면 칩 인하십시오.

#!/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이 필요한지 확실하지 않습니다 (원본의 에코). 내 디스플레이 ... 설정이 외부 디스플레이를 낮은 해상도로 재설정하고 있음을 발견하기 전에 이것을 넣었습니다.


@Walter Wittel을 환영하며 소중한 기여에 감사드립니다. 시간이 있으면 가능하면보다 일반적인 스크립트를 찾아 내려고합니다. 그러나 XRANDR을 사용하여 EDID가 아닌 모니터에 대한 올바른 모드를 추출하는 것이 가능할지 의심됩니다. 어쨌든 보자.
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

LightDM의 GTK greeter를 사용하는 경우 xrandr -q모니터 이름을 찾도록 실행 한 다음 해당 파일 내의 주석에 설명 된대로 /etc/lightdm/lightdm-gtk-greeter속성 을 편집 하고 설정할 active-monitor수 있습니다. 이 속성은 #cursor현재 마우스 커서를 표시하는 모니터를 포함하여 여러 개의 정렬 된 값을 사용할 수 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.