好吧,其实我是标题党来的…

一篇解决实际问题的文章,顺便带你认识下一些Linux的命令以及简单的shell脚本编程…

问题描述:

系统版本:Ubuntu 18.04.4 LTS

我的笔记本电脑外接了一个显示器,本来以为和Windows下一样,笔记本显示器和外接显示器会同步显示,结果ubuntu下外接显示器和笔记本显示不一致,感觉像是被强制分屏了。体验非常不好,感觉还影响了I/O设备,把外接显示器拔了结果鼠标和键盘都不太能动了,重启在没外接显示器的前提下鼠标和键盘才恢复正常。

问题解决方案:

一.关闭笔记本显示器

输入xrandr命令查看当前的显示设备:

xrandr

xrandr简介: "xrandr" 是一款官方的 RandR (Resize and Rotate)Wikipedia:X Window System 扩展配置工具。它可以设置屏幕显示的大小、方向、镜像等。

发现有两个显示设备,如下图:

一个是eDP-1(笔记本显示器),一个是HDMI-1(外接显示器),于是用以下命令关闭了笔记本的显示器,只用外接显示器

xrandr --output HDMI-1 --auto --output eDP-1 --off

解释: xrandr --output 要显示的设备 --auto --output 要关闭的设备 --off

这样舒服多了,但是一重启,发现又回到原来的样子,要再次手动使用以上命令…

每次开机都要这么手动输一次命令才能关掉笔记本的显示器,当然不爽啦,于是就想能不能在开机的时候让系统自己跑个脚本运行这个命令。

二、用shell脚本执行关闭显示器命令

怎么自动执行这个命令呢?当然想到了shell脚本啦。只要能在shell脚本中实现我们要做的事情,然后让linux开机自动运行shell脚本,不必每次开机都要手动输入命令才能关闭笔记本显示器只显示外接显示器,就达到了我的目的。

所以我们需要做到两件事情,一是我们需要让脚本在开机时能自动运行,二是我们需要写一个可以执行关闭显示器命令的脚本

2.1 crontab设置系统定时任务

想做到让Linux开机运行某个任务有几种方式,这里我用了crontab命令。

通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常适合周期性的日志分析或数据备份等工作。

为了确保用crontab可以执行到我们的脚本,我们在某个路径下新建脚本authxrandr.sh,比如在/home/pipi/myshell下新建authxrandr.sh

然后写入最简单的几行:

#! /bin/bash

echo "exec scripts success" >>/home/pipi/myshell/crontablog.txt

exit 0

解释:

1)#! /bin/bash

声明这个脚本使用的shell名称,当这个程序执行时,它能够加载bash的相关环境配置文件,并且执行bash使得命令能够执行,如果没有设置好这一行,那系统可能会因为无法判断该程序需要使用什么shell来执行而导致该程序无法执行。

2)echo “exec scripts success” >>/home/pipi/myshell/crontablog.txt

输出exec scripts success这句话到crontablog.tx文件中去,>>表示在文件后追加,如果文件不存在会自动创建。

这个脚本的主要目的是为了验证我们的shell脚本是否被执行到。执行前我们需要用chmod命令赋予文件执行权限:

chmod +x /home/pipi/myshell/authxrandr.sh

然后使用./authxrandr.sh执行脚本,结果发现文件crontablog.txt成功追加一行exec scripts success

,说明我们的脚本可以正常执行。

解释:

使用ls -l 以下命令可以查看文件权限等信息,其中r为可读,w为可写,x为可执行

ls -l /home/pipi/myshell/autoxrandr.sh

如果新建文件对当前用户没有可执行权限(x),直接使用./authxrandr.sh就会出现下面的报错:

注意:

这里最好要先验证你的脚本是否有问题,至少需要用ls -l检查下是否有执行权限

接下来我们用crontab -e 编辑当前用户的时程表,首次打开编辑可能会让你选择用哪个编辑器,可以选择nano(最简单)或者vi进入。

我们在打开的文件里面加入这么一句:

@reboot /home/pipi/myshell/autoxrandr.sh

表示系统重启时执行脚本autoxrandr.sh。

保存退出后重启电脑验证一下,如果重启后你发现/home/pipi/myshell/crontablog.txt 多了一行

exec scripts success

那么说明我们成功的用crontab实现了系统重启后执行我们编写的shell脚本autoxrandr.sh。

2.2 写一个可以执行关闭显示器命令的脚本

经过一番研究,参考了国外一些Linux问答社区的回答, 新的authxrandr.sh修改如下:

#! /bin/bash

export DISPLAY=:0

echo "start run scripts" >>/home/pipi/myshell/crontablog.txt

# wait until user signs on to get .Xauthority file settings.

UserName=""

while [[ $UserName == "" ]]; do

sleep 2

echo "waiting for user login" > /home/pipi/myshell/crontablog.txt

UserName="$(who -u | grep -F '(:0)' | head -n 1 | awk '{print $1}')"

done

sleep 10

xrandr --output HDMI-1 --auto --output eDP-1 --off

exit 0

解释:

这个脚本做了几件事情:

1)export DISPLAY=:0,设置当前用户的图形显示的位置(当前机器),这是因为cron默认的环境变量设置不包括这个$DISPLAY;Cron provides limited set of environment variables by default . To get xrandr to work through a Cron job, you should export the value of the current user’s $DISPLAY variable . To do that add the follow line to the beginning of your script (or add it within the crontab file )

2)等待用户登录;

之所以要等待用户登录完再执行关闭显示器操作的原因是系统需要时间寻找外接显示器信号,否则找不到显示器会导致我们的命令失败,所以我们等待用户登录完再去执行关闭笔记本显示器的命令;

3)xrandr 设置图形输出到外接显示器HDMI-1,关闭显示器eDP-1;

4)用echo输出一些字符串到文件中,可以通过查看/home/pipi/myshell/crontablog.txt 验证我们的程序是否执行到。

重启验证下,登录后成功关闭了笔记本的显示器!

总结:

1、xrandr简介:https://wiki.archlinux.org/index.php/Xrandr_%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87

2、crontab的简介和例子:

https://www.runoob.com/linux/linux-comm-crontab.html

3、chmod用于修改文件权限

4、ls -l 文件名

可以详细列举文件的权限等信息

5、export

用于设置或显示环境变量

https://www.runoob.com/linux/linux-comm-export.html

6、shell编程相关

1)#! /bin/bash

声明这个脚本使用的shell名称,当这个程序执行时,它能够加载bash的相关环境配置文件,并且执行bash使得命令能够执行,如果没有设置好这一行,那系统可能会因为无法判断该程序需要使用什么shell来执行而导致该程序无法执行。

2)如果新建文件对当前用户没有可执行权限(x),直接使用./authxrandr.sh就会出现下面的报错:

Permission denied

7、参考链接:

1)国外问答社区类似的问题

https://askubuntu.com/questions/1102389/xrandr-not-working-on-crontab

2)为什么要添加export DISPLAY=:0

https://askubuntu.com/questions/958228/adjust-brightness-with-xrandr-and-cron-job)

欢迎关注微信公众号,pipi的奇思妙想

不定时带你体验各种奇思妙想~

linux笔记本无法识别显示器,为了解决笔记本外接显示器导致Ubuntu显示异常的问题,我做了这么多事情......相关推荐

  1. linux笔记本无法识别显示器,笔记本Ubuntu系统外接显示器的分辨率问题

    之前一直使用Acer TM5720G外接Dell 17寸液晶作为主电脑,近日撤掉主笔记本,换上了我的HP小本,发现在Ubuntu下,分辨率最高只有1024×768,没有1280×1024选项,查找资料 ...

  2. 一秒解决笔记本无法连接网络问题——解决笔记本插网线,显示未识别网络。

    插上网线没有网络 今天碰到了笔记本插入网线,但显示网络未识别,无法连接到intnet.网上搜了一下许多帖子都是讲水晶头坏了或从路由器和光猫下手,但都无法解决我的问题.进过尝试才发现真TM的简单.下面我 ...

  3. 电脑分屏没有声音_Win10笔记本增加双屏显示器及解决没有声音的问题

    一个屏幕,打开多了几个窗口就很麻烦,特别是操作虚拟机什么的.就想着把一台式机的显示器拿过来做成双屏显示,就更方便折腾了. HDMI 转 VGA 现在的笔记本一般都没有 VGA 接口了,但有 HDMI ...

  4. Ubuntu 12.04版本不能正确识别显示器的解决办法

    工作中经常需要使用Ubuntu12.04系统,由于X服务不够智能的关系,很多显示器无法识别:甚至有的显示器厂商并没有做Ubuntu 12.04这样老系统的适配,对于这样的旧系统配新显示器的搭配,就经常 ...

  5. 笔记本计算机无法启动怎么解决,笔记本突然无法开机的原因_笔记本突然关机无法开机怎么解决-win7之家...

    想必很多用户都遇到过这样的问题,就是在使用笔记本电脑的时候,突然会遇到无法突然关机了,然后就无法开启了,怎么按都无法开机,然而许多用户面对这样的问题都不知所措,那么笔记本突然无法开机的原因是什么呢?又 ...

  6. VMware虚拟机中安装的Linux系统无法识别U盘解决方法

    文章目录 1. 问题描述 2. 解决方法 3. 参考文献 1. 问题描述 如图1所示,在VMware安装的Linux系统(Ubuntu)无法读取U盘 图 1 U盘读取失败 2. 解决方法 原因在于所用 ...

  7. 解决浏览器缩放导致页面显示不全问题

    问题 pc端web页面开发时,发现windows系统经常推荐用户使用125%.150%比例的缩放窗口,这样导致web页面被进行缩放,除此之外还有人为的按钮缩放.故此,在页面devicePixelRat ...

  8. 戴尔笔记本不能识别U盘和鼠标解决方法

    戴尔笔记本不能识别U盘和鼠标解决方法 参考文章: (1)戴尔笔记本不能识别U盘和鼠标解决方法 (2)https://www.cnblogs.com/StrangeDream/archive/2012/ ...

  9. 笔记本外接显示器,显示器模糊解决办法。亲测有效

    笔记本外接显示器,显示器模糊解决办法.亲测有效 什么改分辨率,改这个, 改那个 ,都不需要 简单明了一句话:显示器上按钮 按一下找到自动调节,完事

最新文章

  1. 数据库连接池和Tomcat连接池的配置问题
  2. html如何设置多个模块,在webpack中如何实现多页面开发
  3. Linux内核移植之四:内核启动过程
  4. Keil使用 fromelf 生成bin文件
  5. Selenium_python自动化环境搭建篇
  6. 查了一晚上的资料,累啊。
  7. PC顶级后次世代和主流次世代图像引擎技术规格表
  8. 8051单片机的中断发送
  9. c语言规定学号长度,c语言第1-9章基本概念练习题ans(最全).docx
  10. 百度网盘偷偷更新,终于实现免费不限速了!
  11. 计算机考试excel基础试题,计算机基础(Excel2010)试题及答案解析
  12. 酷家乐的 Istio 与 Knative 实践
  13. Python学习-PY4E作业
  14. Altium Designer15安装破解教程
  15. 程序计数器(PC ) 详解
  16. 18软工实践-团队现场编程实战(抽奖系统)
  17. 164work 综合练习1
  18. 机器学习知识总结 —— 12. 机器与深度学习中常用术语 [K-P]
  19. 核心竞争力学习与思考
  20. matlab相关函数

热门文章

  1. oppo reno 10倍变焦版
  2. 卖水果如何通过闲鱼引流?如何利用好闲鱼庞大的流量池?
  3. 闲鱼副业怎么做?闲鱼怎么搞副业?闲鱼能干啥副业?
  4. 对抗神经网络求解PDE,简称WAN
  5. 计算机打字竞赛活动背景,学生打字比赛的活动策划书
  6. Redis常用数据类型及其对应的底层数据结构
  7. 未来的公共厕所都长这样了?轻松の驿站智慧公厕 创意型の智慧驿站厕所 智慧厕所驿站
  8. Tomcat的安装与环境变量配置(图文详解)
  9. 小红书服务网格大规模落地实践分享直播回顾
  10. 计算机视觉-图像的傅里叶变换