如何强制多个监视器为LightDM提供正确的分辨率?

Modified on: Sat, 09 Jun 2018 04:26:23 +0800

我受到BUG的影响:https://bugs.launchpad.net/ ubuntu的/ +源/统一-招待员/ +错误/ 874241
否则,如果像我一样,您在登录阶段将笔记本电脑连接到分辨率较高的第二台显示器LIGHTDM镜像两个屏幕中的显示器并为它们分配一个共同点在我的情况下,分辨率(1024X768),而不是扩展桌面(主屏幕与greeter和辅助,只有一个徽标,如12.04的Multiple Monitors UX规范书中所述)。

这是我的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仅输出到笔记本电脑屏幕并忽略任何外部显示器。
E.G:

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

提前致谢。

最佳答案

我管理下面的这个小基本脚本来回答我的问题。现在,无论外接显示器是否已连接,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;
作者:Hanynowsky

相关问答

添加新评论