如何强制多台显示器为 LightDM 设置正确的分辨率?

Han*_*sky 18 xrandr resolution lightdm 12.04

我受到的BUG:https://bugs.launchpad.net/ubuntu/+source/unity-greeter/+bug/874241 否则,如果你像我一样有连接到更高的分辨率,第二显示器一台笔记本电脑LIGHTDM在登录阶段,在两个屏幕中镜像显示,并在我的情况下为它们分配一个通用分辨率(1024X768),而不是扩展桌面(主屏幕带有迎宾员,辅助屏幕只有一个徽标,如多显示器用户体验规范书中所述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)
Run Code Online (Sandbox Code Playgroud)

我试图强制 lightdm 执行一些 xrandr 命令,以便为每个显示器设置正确的分辨率并扩展桌面,所以我创建了一个名为/usr/share/lightdmxrand.sh的简单脚本:

#!/bin/sh
xrandr --output HDMI1 --primary --mode 1920x1080 --output LVDS1 --mode 1366x768 --below HDMI1
Run Code Online (Sandbox Code Playgroud)

并告诉 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
Run Code Online (Sandbox Code Playgroud)

重新启动 lig​​htdm : sudo restart lightdm 统一欢迎登录屏幕是正确的。具有各自正确分辨率的屏幕,如果我将鼠标移到屏幕上,它会通过登录框和面板获得焦点,而未聚焦的屏幕仅显示 Ubuntu 徽标(正如 MM UX 规范书中所指定)。极好的!

只要外接显示器连接到笔记本电脑,此解决方法就可以很好地工作。在未连接的情况下,在登录阶段,我得到:低图形模式错误(您正在低图形模式下运行,您的屏幕,输入设备......没有被检测到......)。正常,因为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)
Run Code Online (Sandbox Code Playgroud)

提前致谢。

Tob*_*old 18

注意:我也在这里发布了这个答案

我找到了一个非常简单的解决方法,非常适合我运行 13.04。在带有非永久连接的 24" 外部屏幕的笔记本电脑上。

我只是从这里复制

  1. 登录
  2. 使用 xrandr 或 Displays 控制实用程序来配置您的显示器,您希望它们在登录屏幕中的配置方式
  3. sudo cp ~/.config/monitors.xml /var/lib/lightdm/.config/

因为我已经正确配置了我的显示器,所以我只需要执行第 3 步。


Han*_*sky 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). 
Run Code Online (Sandbox Code Playgroud)

所以如果有人有更好的解决方案或更通用的脚本,他就是那个人。

脚本:

    #!/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;
Run Code Online (Sandbox Code Playgroud)