在奇怪的情况下,通常在错误地重新启动计算机后,我的登录屏幕分辨率不是默认的1440x900,但我认为是1600x900。现在,我有了这台显示器,它在处理非设计分辨率时确实非常糟糕,并且会在屏幕上显示一个愚蠢的“错误分辨率”框。
无论如何,有什么方法可以使登录屏幕加载1440x900分辨率?我正在使用Unity和LightDM运行Ubuntu 11.10。
在奇怪的情况下,通常在错误地重新启动计算机后,我的登录屏幕分辨率不是默认的1440x900,但我认为是1600x900。现在,我有了这台显示器,它在处理非设计分辨率时确实非常糟糕,并且会在屏幕上显示一个愚蠢的“错误分辨率”框。
无论如何,有什么方法可以使登录屏幕加载1440x900分辨率?我正在使用Unity和LightDM运行Ubuntu 11.10。
Answers:
您可以为此编写脚本(源LightDM Resolution)。
terminal
单位破折号以查看选项或按Ctrl+ Alt+T键入/复制此命令以显示您的显示详细信息:
xrandr -q
如果只有一台监视器,您将在输出中看到如下所示的一行(可能带有一些不同的值,它是我们后面的标识符):
DVI-0 connected 1680x1050+0+0 (normal left inverted right x axis y axis) 473mm x 296mm
在这种情况下,屏幕标识符为DVI-0
打开您喜欢的文本编辑器,在本例中使用gedit,按Alt+ F2并输入gedit
键入/复制到:
#!/bin/sh
xrandr --output DVI-0 --primary --mode 1440x900
将此另存为 lightdmxrandr.sh
在我们将其付诸实践之前,您可能需要测试该脚本。返回终端,导航至我们刚刚保存的位置:
cd ~/Desktop
现在我们需要使其可执行:
chmod a+rx lightdmxrandr.sh
现在运行它:
./lightdmxrandr.sh
(如果登录后屏幕自动自动更正,您可能看不到差异,因此您可能希望使用不同的测试分辨率,但是知道在测试时可以使用)
现在开始移动我们制作的小脚本:
sudo mv ~/Desktop/lightdmxrandr.sh /usr/share/.
如果您不使用sudo
,可能会遇到权限错误(我出于个人喜好使用此文件夹)
我们现在需要在lightdm中运行它,导航到正确的文件夹:
cd /etc/lightdm
打开lightdm conf文件:
sudo gedit lightdm.conf
现在,在最后一行之后添加指令以运行脚本并保存:
display-setup-script=/usr/share/lightdmxrandr.sh
现在重新启动,这应该在lightdm登录屏幕上设置正确的分辨率。
(这些说明可能看起来很长,但根本不需要很长时间)
chown root:root
也是吗?
我发现一个非常简单的解决方法,非常适合运行13.04的我。(更新:现在为13.10)在具有永久不连接的24英寸外部屏幕的笔记本电脑上。
我只是从这里复制
- 登录
- 使用xrandr或Displays控件实用程序来配置监视器,并希望它们在登录屏幕中进行配置
- 将〜/ .config / monitors.xml复制到/var/lib/lightdm/.config
由于我已经正确配置了显示器,因此只需要执行步骤3。
此处给出的其他一些答案对我有用,但仅在特定情况下起作用,而在其他情况下(LOW GRAPHICS MODE ERROR)则冒着无法使用系统的风险。例如,在永久连接外部监视器的情况下(@captain_G接受答复),或者始终将同一设备连接到用于外部监视器的输出(脚本由@Axlrod进行)。@MarcoV的答案似乎是最通用的解决方案,但是它仍然涉及脚本规则。
$ sudo ln ~/.config/monitors.xml /var/lib/lightdm/.config/monitors.xml
否,符号链接不起作用。)
monitors.xml
?我正在使用XFCE,该文件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脚本中添加更多信息。
略微改善了上述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分辨率; 做完了
sudo gedit /usr/share/X11/xorg.conf.d/52-myres.conf
然后在文件中:
Section "Monitor"
Identifier "VGA1"
Option "PreferredMode" "1152x864"
EndSection
保存并退出。这些值是从command获得的xrandr -q
。VGA1
是我的连接器1152x864
的名称,也是分辨率的名称。
这适用于Xubuntu 16.04。它设置了首选的分辨率,对我来说,它让我设置登录屏幕的分辨率,而不是将其默认设置为支持的最高分辨率。
从这里的答案修改
我发现有用的是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的新手,所以希望我写了不错的东西。
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;
这就是我在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
这给了我与台式机分辨率稍有不同的分辨率,这就是为什么我没有在主要答案中包括该方法的原因。
我认为您的显示器报告说是首选的高屏幕分辨率。现在,您想覆盖此默认首选项。有关如何完成此操作的详细信息,请参见我对一个非常类似的问题的回答。
我遇到了相反的问题:我的屏幕分辨率(1280x1024)总是比我想要的分辨率(1600x1200)低。不过,我发现的(并在链接的答案中进行了描述)该修复程序有望类似地应用于您的问题。