登录屏幕分辨率错误


44

在奇怪的情况下,通常在错误地重新启动计算机后,我的登录屏幕分辨率不是默认的1440x900,但我认为是1600x900。现在,我有了这台显示器,它在处理非设计分辨率时确实非常糟糕,并且会在屏幕上显示一个愚蠢的“错误分辨率”框。

无论如何,有什么方法可以使登录屏幕加载1440x900分辨率?我正在使用Unity和LightDM运行Ubuntu 11.10。


:对我来说,所有的解决方案只有这一个在18.04机器上运行lightdm askubuntu.com/questions/507726/...
Takkat

Answers:


40

您可以为此编写脚本(源LightDM Resolution)。

  1. 首先,我们需要找出您的监视器标识符是什么。打开终端,开始输入terminal单位破折号以查看选项或按Ctrl+ Alt+T
  2. 键入/复制此命令以显示您的显示详细信息:

    xrandr -q
    

    如果只有一台监视器,您将在输出中看到如下所示的一行(可能带有一些不同的值,它是我们后面的标识符):

    DVI-0 connected 1680x1050+0+0 (normal left inverted right x axis y axis) 473mm x 296mm
    

    在这种情况下,屏幕标识符为DVI-0

  3. 打开您喜欢的文本编辑器,在本例中使用gedit,按Alt+ F2并输入gedit

  4. 键入/复制到:

    #!/bin/sh
    xrandr --output DVI-0 --primary --mode 1440x900
    

    将此另存为 lightdmxrandr.sh

  5. 在我们将其付诸实践之前,您可能需要测试该脚本。返回终端,导航至我们刚刚保存的位置:

    cd ~/Desktop
    

    现在我们需要使其可执行:

    chmod a+rx lightdmxrandr.sh
    

    现在运行它:

    ./lightdmxrandr.sh
    

    (如果登录后屏幕自动自动更正,您可能看不到差异,因此您可能希望使用不同的测试分辨率,但是知道在测试时可以使用)

  6. 现在开始移动我们制作的小脚本:

    sudo mv ~/Desktop/lightdmxrandr.sh /usr/share/.
    

    如果您不使用sudo,可能会遇到权限错误(我出于个人喜好使用此文件夹)

  7. 我们现在需要在lightdm中运行它,导航到正确的文件夹:

    cd /etc/lightdm
    
  8. 打开lightdm conf文件:

    sudo gedit lightdm.conf
    
  9. 现在,在最后一行之后添加指令以运行脚本并保存:

    display-setup-script=/usr/share/lightdmxrandr.sh
    

现在重新启动,这应该在lightdm登录屏幕上设置正确的分辨率。

(这些说明可能看起来很长,但根本不需要很长时间)


1
谢谢!我使用下面提到的Leon脚本。askubuntu.com/a/88882/28071
beanaroo 2012年

这是一个很好的脚本,我想我会将其存储起来以备将来使用!
captain_G 2012年

不幸的是,这只会破坏Ubuntu 13.04中的功能。可能是因为他们一直在对操作系统进行一些重大更改。
Patrick

同样不适用于Ubuntu 13.10 + NVIDIA驱动程序319:脚本已执行但分辨率未更改-可能是因为NVIDIA驱动程序覆盖了该脚本。
演讲者

我认为应该chown root:root也是吗?
Aquarius Power

38

我发现一个非常简单的解决方法,非常适合运行13.04的我。(更新:现在为13.10)在具有永久不连接的24英寸外部屏幕的笔记本电脑上。

我只是从这里复制

  1. 登录
  2. 使用xrandr或Displays控件实用程序来配置监视器,并希望它们在登录屏幕中进行配置
  3. 将〜/ .config / monitors.xml复制到/var/lib/lightdm/.config

由于我已经正确配置了显示器,因此只需要执行步骤3。

此处给出的其他一些答案对我有用,但仅在特定情况下起作用,而在其他情况下(LOW GRAPHICS MODE ERROR)则冒着无法使用系统的风险。例如,在永久连接外部监视器的情况下(@captain_G接受答复),或者始终将同一设备连接到用于外部监视器的输出(脚本由@Axlrod进行)。@MarcoV的答案似乎是最通用的解决方案,但是它仍然涉及脚本规则。


4
比其他答案要简单得多...我想知道为什么它没有更多票。好吧,它有我的。
2013年

再说一次,尽管它确实有助于登录屏幕,但是如果其他用户不必再次设置显示分辨率,那将是很好的。
2013年

3
与其复制文件,不如创建文件的链接,以便在您更改屏幕设置时会自动更新该文件:($ sudo ln ~/.config/monitors.xml /var/lib/lightdm/.config/monitors.xml否,符号链接不起作用。)
Nathan JB 2015年

3
哪个应用程序编写/更新monitors.xml?我正在使用XFCE,该文件2岁了,已经完全过时了。我找不到类似的文件。
scai 2015年

1
与创建用于更改分辨率的脚本相反,这是正确的方法。.config / monitors.xml可以支持多个显示器配置(即,您在使用扩展坞和2个显示器时的设置,而在家里没有扩展坞和1个外部显示器的设置)。创建手动脚本来设置分辨率会相对复杂些。
伊亚德K

20

您可以代替创建脚本,而只需向文件中添加/etc/lightdm/lightdm.conf如下代码:

display-setup-script=xrandr --output default --mode 1280x720

插入之前,请确保该命令有效,因为使用错误的命令将不会启动lightdm。


嗨,您的xrand命令说:warning: output default not found; ignoring
SebMa

@SebMa您必须使用正确的输出名称!
肯·夏普

2

对于多显示器设置,您可以断开笔记本电脑的连接,然后不使用它,这是一个简单的解决方案:

跑:

xrandr

获取您正在使用的笔记本电脑的设备通常是LVDS1,对我来说,我有一个DP2(显示端口2),它可能是HDMI1或其他任何东西,只需找到旁边列出的分辨率的设备即可。

创建这个小的bash文件:

#!/bin/bash

mode="$(xrandr -q|grep -A1 "DP2 connected"| tail -1 |awk '{ print $1 }')"
if [ -n "$mode" ]; then
  xrandr --output LVDS1 --off
  xrandr --output DP2 --primary --mode 2540x1440
fi

用笔记本电脑显示器连接替换LVDS1。

用外部监视器连接替换DP2。

将bash脚本放在/ usr / bin / local /

chmod + x脚本

编辑/etc/lightdm/lightdm.conf

display-setup-script=/path/to/my/script

重启。

仅当您现在实际在显示时,才发生分辨率更改。

如果在同一连接器上有多个具有不同监视器/分辨率的位置,则必须在bash脚本中添加更多信息。


2

略微改善了上述Axlrod的脚本

您需要做的就是指定要使用哪个显示器,以及您的笔记本电脑显示器(LVDS)。

#!/ bin / bash
LVDS =“ LVDS-0”
PRIMARY =“ VGA-0”

函数get_displays()
{
        xrandr -q | grep已连接| awk'{print $ 1}'
}

函数get_resolution()
{
        [[-z“ $ 1”]] &&返回0 || xrandr -q | grep -A1 $ 1 | 尾巴-1 | awk'{print $ 1}'| grep -e“ ^ [0-9]”
}

用于显示在$(get_displays);中 做
        resolution =`get_resolution $ display`

        [[$ display == $ PRIMARY]] && arg =“-primary”;
        [[-n $ resolution]] && mode =“-mode $ resolution”;

        如果[[$ display == $ LVDS]]; 然后
                xrandr-输出$ display --off
        elif [[-n $ mode]]; 然后
                xrandr-输出$ display $ arg $ mode
        科幻
        未设置模式arg分辨率;
做完了

1
sudo gedit /usr/share/X11/xorg.conf.d/52-myres.conf

然后在文件中:

Section "Monitor"
    Identifier "VGA1"
    Option "PreferredMode" "1152x864"
EndSection

保存并退出。这些值是从command获得的xrandr -qVGA1是我的连接器1152x864的名称,也是分辨率的名称。

这适用于Xubuntu 16.04。它设置了首选的分辨率,对我来说,它让我设置登录屏幕的分辨率,而不是将其默认设置为支持的最高分辨率。

这里的答案修改


1
安装open-vm-tools和open-vm-tools-desktop之后,将monitors.xml复制到/var/lib/lightdm/.config对我而言不再起作用。这样指定首选分辨率对我来说是固定的。
jropella

1

我发现有用的是Ubuntu指南网站上的帖子。我在Ubuntu 11.10中尝试了很多事情,甚至尝试仅使用GNOME Classic。分辨率始终为1024x768,当我手动将其设置为1440x900时,它是“虚拟”的,我的意思是我必须用鼠标滚动才能浏览超出实际屏幕尺寸的整个桌面。

在终端中,我运行了以下命令:

sudo gedit /etc/default/grub

文本编辑器可能需要一段时间才能加载。加载后,我编辑了该行

GRUB_GFXMODE=1024x768

并将其更改为:

GRUB_GFXMODE=1440x900

记住要运行update-grub以应用更改。

之后,我尝试重新安装VESA驱动程序(在这台计算机上,我有一个GeForce 260 GTX)。我知道更好的方法是使用Nvidia官方驱动程序,但是使用它们的问题始终是相同的...当然,我认为现在的性能会更糟。

因此,在检查“ Nvidia X服务器设置”面板时,我确认已添加分辨率,并切换至该分辨率后,屏幕显示正确。实际上,我在GNOME Classic中使用Ubuntu 11.10。

我是Linux的新手,所以希望我写了不错的东西。


0

不要混入可能使您的登录屏幕无法使用的脚本或配置文件!

而是登录并设置您的首选屏幕设置*,然后运行以下命令:

sudo ln ~/.config/monitors.xml /var/lib/lightdm/.config/monitors.xml

现在,您的登录分辨率将始终反映您当前登录的用户的设置。

*不要忘记单击“应用”


这有效,但它是次要的。它会以最大分辨率正常加载,然后切换到您的设置。如何使它加载正确的分辨率以启动?
哥达德

0

Axelrod的脚本有些缺陷,因为“已连接”的grep也会捕获所有“已断开”的显示...不是我们想要的...

此外,将grep与awk和tail等一起使用是浪费循环的,因此我建议如下。此外,在get_resolution中,我们将返回码更改为1,因为返回码零通常表示没有错误,因此,如果第一个参数不存在,则使用1。

总之,通过实例化脚本的主要部分,可以在需要的时候在函数库中获取该函数的源代码并在以后的任何时间执行该函数,还可以使用局部变量(无需取消设置)。

function get_displays()
{
    xrandr -q | awk '($2 == "connected") {print $1;}'
};

# the "\" and c/r were added for readability on this website
# I do not have them in my code variant that I use.
function get_resolution()
{
    [[ -z "$1" ]] && return 1;
    xrandr -q | \
    awk -v display="$1" '($1 == display && $2 == "connected") {getline; print $1;}';
};

function setup_displays()
{
    local   primary=${2:-"VGA-0"};
    local   lvds=${3:-"LVDS-0"};

    for display in $(get_displays);
    do
            local   resolution=${1:-"$(get_resolution $display)"};

            [[ $display == $primary ]] && local arg="--primary";
            [[ -n $resolution ]] && local mode="--mode $resolution";

            if [[ $display == $lvds ]];
            then
                    xrandr --output $display --off;
            elif [[ -n $mode ]];
            then
                    xrandr --output $display $arg $mode;
            fi;
    done;
};

setup_displays;

0

这就是我在Xubuntu 16.04中工作的方式。

您需要沿字符串获取所需的分辨率。这在命令的结果内:

xrandr --verbose

现在选择具有所需分辨率的零件。它看起来像:

1152x864 (0xa6) 108.000MHz +HSync +VSync
    h: width  1152 start 1216 end 1344 total 1600 skew    0 clock  67.50KHz
    v: height  864 start  865 end  868 total  900           clock  75.00Hz

从上面的数据中,您应该获得字符串108.000 1152 1216 1344 1600 864 865 868 900 +HSync +VSync

要找到输出的名称,请找到类似的行:

VGA1 connected 1152x864+0+0 (0xa4) normal (normal left inverted right x axis y axis) 306mm x 230mm

在这里,我的输出名为VGA1

现在创建脚本:

sudo gedit /usr/share/lightdmxrandr.sh

然后在文件中编写以下内容:

#!/bin/sh
xrandr --newmode "1152x864_75.00"  108.000  1152 1216 1344 1600  864 865 868 900 +HSync +VSync
xrandr --addmode VGA1 "1152x864_75.00"
xrandr --output VGA1 --mode 1152x864_75.00 --pos 0x0 --rotate normal

保存并关闭文件。使脚本可执行:

sudo chmod a+rx /usr/share/lightdmxrandr.sh

创建一个配置文件以调用刚刚创建的脚本。

sudo gedit /etc/lightdm/lightdm.conf.d/00-myres.conf

在此文件中输入:

[Seat:*]
display-setup-script=/usr/share/lightdmxrandr.sh

保存并关闭文件。重新启动,希望您选择的分辨率将在您登录时显示。

实际上,这是对我有用的唯一方法,即使重新创建现有的分辨率也不符合逻辑。

从这个问题修改答案。

注意

获得长分辨率字符串的另一种方法是程序cvt。要获得分辨率为1152x864的字符串,刷新率75.00:

cvt 1152 864 75

这给了我与台式机分辨率稍有不同的分辨率,这就是为什么我没有在主要答案中包括该方法的原因。


0

如果您使用的是LightDM的GTK迎宾器,则可以运行xrandr -q以找到监视器的名称,然后按照该文件中的注释中的说明进行编辑/etc/lightdm/lightdm-gtk-greeter和设置属性active-monitor。此属性可以采用多个有序值,包括#cursor当前显示鼠标光标的监视器的值。


0

我想将配置显示器的脚本附加到我键盘上不使用的多媒体键之一上。目前,我有一个标记为“ Windows Media Center”的按钮,将我的显示器强制设置为首选配置。这样,如果您盲目飞行并且您的显示器未同步到所需的分辨率,则只需混入热键即可,一切都将固定。


-1

“首选屏幕模式”可能是问题所在

我认为您的显示器报告说是首选的高屏幕分辨率。现在,您想覆盖此默认首选项。有关如何完成此操作的详细信息,请参见我对一个非常类似的问题的回答

我遇到了相反的问题:我的屏幕分辨率(1280x1024)总是比我想要的分辨率(1600x1200)低。不过,我发现的(并在链接的答案中进行了描述)该修复程序有望类似地应用于您的问题。


谁将我的答案投了反对票,能否请您添加注释,说明为什么您认为此答案没有用?
Chriki

-2

2014年中(11,1)运行Xenial的MacBook Pro出现了相同的问题。我已经以各种形式尝试了所有上述解决方案,但始终都会使X进入故障安全低图形模式(但以我希望将其设置为默认值的分辨率显示)。

经过对论坛的大量争论和谷歌搜索之后,原来我忘了最简单,默认的潜在解决方案:nomodeset。这解决了问题。

TL; DR:不要忘记尝试nomodeset!Esp。在MacbookPro 11,1上。


-3

我创建此脚本是为了使其更具动态性(多个工作空间/不同的监视器)。

唯一的烦恼:从lightdm登录时,屏幕仍然闪烁,就像它要更改分辨率一样:


1
找不到粘贴。
Tobold

确实; 如果您仍然有脚本的本地副本,请考虑重新上传它。
wchargin 2013年

1
我已将脚本上传到github。我不知道为什么paste.ubuntu.com删除了它:(
Leon
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.