一、背景
安装麒麟SP1系统后发现显示屏无法正常显示,通过显示硬件自动调节后上下左正常,右侧整条有一部分缺失,桌面查看分辨率为1920*1080是正确的,于是想到xrandr命令来解决此问题
二、手动指定分辨率(1920*1080 60hz举例),重启后失效
[kylin@kylin~]$ xrandr #会输出多种已加载分辨率
[kylin@kylin~]$ export DISPLAY=:0.0 #设置DISPLAY环境变量
[kylin@kylin~]$ cvt 1920 1080 60 | sed -n 's/Modeline //p' #过滤出需要使用的参数
[kylin@kylin~]$ xrandr --newmode "1920x1080_60.00" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync #创建一个mode,参数为上一条命令过滤出来的参数
[kylin@kylin~]$ xrandr --addmode VGA-1 "1920x1080_60.00" #新建模式,将新模式添加至当前输出设备
[kylin@kylin~]$ xrandr --output VGA-1 --mode 1920x1080_60.00 #设置newmode为当前分辨率
三、开机自动启动
1、编写设置参数脚本
[kylin@kylin~]$ vim /home/kylin/display.sh #编写脚本
#!/bin/bash
export DISPLAY=:0.0
xrandr --newmode "1920x1080_60.00" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync
xrandr --addmode VGA-1 "1920x1080_60.00"
xrandr --output VGA-1 --mode 1920x1080_60.00
[kylin@kylin~]$ sudo chmod +x /home/kylin/display.sh #给脚本加执行权限
[kylin@kylin~]$ /home/kylin/display.sh #验证脚本是否可正确执行,若分辨率可正常更改,继续如下操作
2、编写desktop文件
[kylin@kylin~]$ vim /etc/xdg/autostart/test.desktop
[Desktop Entry]
Encoding=UTF-8 #字符串所使用的编码方式
Name=display_ #desktop 文件最终显示的名称(一定要注意和 desktop 文件名的区别)
Exec=sh /home/kylin/display.sh #用于指定二进制可执行程序的完整路径
Info="Spark"
Terminal=false #程序是否在终端窗口中运行
Type=Application #用于指定 desktop 文件的类型(包括 3 种类型:Application、Link、Directory)
StartupNotify=true #如果不存在,则合理的处理取决于实现
[kylin@kylin~]$ sudo chmod +x /etc/xdg/autostart/test.desktop #加执行权限
#一个 desktop 文件主要由两部分组成,头部 [Desktop Entry] 声明(用于指定这是一个desktop文件)和一系列的参数/值对组成。一个 desktop文件至少要指定3个参数的值(Name、Type 和 Exec)
#=号两边不能有空格
#条目具体要求和含义可参见:
https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html
3、加入开机自启
4、文件描述整理
键Key 描述 Value 类型 是否必须? 生效类型 Type Application (type1), Link (type2), Direcory (type3) string Yes Version 版本,例如1.0 string No 1-3 Name 应用程序的特定名称 localestring Yes 1-3 GenericName 应用程序的通用名称 localestring No 1-3 NoDisplay 不在菜单中显示, 但可以与MIME类型相关联 boolean No 1-3 Comment 应用描述 ocalestring No 1-3 Icon 要么绝对路径,要么符合图标主题规范 localestring No 1-3 Hidden 是否隐藏,等同于不存在的文件 boolean No 1-3 OnlyShowIn, NotShowIn 一般不用此字段 boolean No 1-3 DBusActivatable DBus激活,默认false boolean No TryExec 如果文件不存在, 则忽略该文件,并不在菜单中出现 string No 1 Exec 执行路径 string No 1 Path 当Type=Application时,程序运行的目录 string No 1 Terminal 程序是否在终端窗口中运行 boolean No 1 Actions 为其他组提供接口,比如Action=Gallery;,那么其他组就为[Desktop Action Gallery] string(s) No 1 MimeType 此应用支持打开的类型 string(s) No 1 Categories 参阅桌面菜单规范 string(s) No 1 Implements 默认情况下,桌面文件不实现任何接口 string(s) No 1 Keywords 用于搜索,不应该是Name或者为多余的值 GenericName localestring(s) No StartupNotify 如果不存在,则合理的处理取决于实现(假设为false,使用StartupWMClass等)。参阅启动通知协议规范 boolean No 1 StartupWMClass 一般跟Name相同即可 string No 1 URL 只适用于Type=Link string Yes 2
4、
四、错误整理
错误1:设置DISPLAY环境变量, 运行图形程序(如xclock)时会收到如下错误:
Xlib: connection to ":0.0"refused by server
Xlib: No protocol specified
Error: Can’t open display: :0.0
错误2:开机自启趟过的坑
尝试过rc.loacl、xorg.conf、systemd、crontab、profile都无法实现开机自动配置,根据表现猜测为启动时序问题导致,最后使用了系统自带desktop解决此问题