为什么我的lightdm.conf编辑不会影响我的桌面屏幕分辨率?

我想把我的桌面屏幕分辨率改成1366x768。但是我的VESA驱动程序(AMD REDWOOD)没有检测到这个分辨率。所以我创建了一个shell脚本,内容如下:
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文件)所做的修改没有影响到我的桌面分辨率。这是一种必须在launchpad上报告的错误吗?还是说在lightdm中进行的修改不会影响桌面屏幕?
附注:在我看来,这不仅仅适用于Ubuntu 14.04。
1个回答

我尝试了类似的事情,经过一些调试,我想我弄清楚了发生了什么。你的脚本可能确实被运行了,并且可能正确设置了分辨率。然而,由于它是由登录管理器运行的,它在Unity完成设置桌面环境之前就已经运行了,并且Unity会读取自己的设置并将分辨率重置为你之前设定的默认分辨率。所以,我认为发生的情况是:

  1. lightdm 正确地运行了你的脚本
  2. 这样设置了你期望的分辨率
  3. Unity启动,读取自己的设置并恢复到你在那里设定的默认分辨率
  4. 你的分辨率回到了之前的状态

现在,这是因为VESA驱动程序无法自动检测到你期望的分辨率。这意味着当你从Unity的显示设置中更改分辨率时,你给它一个除非你运行 xrandr 命令否则不可用的分辨率。因此,下次重新启动时,这将被忽略,Unity会恢复到默认分辨率。

所以,你需要做的是让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命令的脚本添加到您会话的启动应用程序中。


编辑 /usr/share/lightdm/lightdm.conf.d/ 下的文件是更改 lightdm.conf 的错误方法。LightDM 项目页面指出系统管理员可以在 /etc/lightdm/lightdm.conf.d/ 或 /etc/lightdm/lightdm.conf 中覆盖默认配置。你不应该编辑 /usr/share/lightdm/ 下的文件,因为尽管它可能暂时起作用,但很可能会被软件包更新覆盖。来源:LightDM 项目页面 http://www.freedesktop.org/wiki/Software/LightDM/请纠正您的回答。 - happyskeptic
3我没有足够的声望去添加一个简单的评论,但我想指出sh文件需要赋予执行权限。原帖提到他/她已经这样做了,但terdon的回答在步骤中没有包括这个。如果不可执行,你将不得不降级到命令提示符,因为它将无法登录(至少对我来说是这样)。这只是我的一个小疏忽,但以防其他人也忽略了这一步,我想在这里重申一下。 - Kirk Spencer