使用udev实现显示器的热插拔和usb的自动挂载
udev:用来监听硬件设备是否发生改变,并可以给硬件设备命名 ,也可以在硬件发生改变之后执行脚本
使用udev检测显示器是否发生变化,然后执行脚本,解决linux显示器热插拔问题
先补充一点:
[root@localhost ~]# cat /sys/class/drm/card0-VGA-1/status
connected
connectd 表示VGA口处于连接状态
拔掉则显示disconnected 脚本里面可以通过这来判断显示器是否连接
vim /etc/udev/rules.d/99-monitor-watch.rules
ACTION=="change", SUBSYSTEM=="drm", RUN+="/usr/local/bin/watch_monitor.sh" #当显示器发生改变的时候执行脚本
vim /usr/local/bin/watch_monitor.sh
#!/bin/bash
DEVICES=$(find /sys/class/drm/*/status)
while read l
do
dir=$(dirname $l);
status=$(cat $l);
dev=$(echo $dir | cut -d\- -f 2-);
if [ $(expr match $dev "HDMI") != "0" ]
then
#REMOVE THE -X- part from HDMI-X-n
dev=HDMI${dev#HDMI-?-}
else
dev=$(echo $dev | tr -d '-')
fi
if [ "connected" == "$status" ]
then
echo $dev "connected"
DP1=$dev
fi
done <<< "$DEVICES"
function dp_connect(){
ps aux |grep Xorg|grep tty1|awk '{print $2}'|xargs -x kill
# xrandr --output $DP1 --auto
echo "dp_connect"
}
function dp_disconnect(){
echo "dp_disconnect"
}
test $DP1 &> /dev/null && dp_connect || dp_disconnect
chmod +x /usr/local/bin/watch_monitor.sh
缺点:每次插上显示器 都会回到登录页面,
2,使用xrandr的方式实现热插拔
vim /etc/udev/rules.d/99-monitor-watch.rules
KERNEL=="card0", SUBSYSTEM=="drm", ENV{DISPLAY}=":0", RUN+="/usr/bin/xrandr --output VGA1 --auto"
udevadm control --reload-rules
可以使用xrandr的方式来显示。这样就不会回到登录页面
二: 使用udev解决usb自动挂载
vim /etc/udev/rules.d/100-mountsda.rules
KERNEL=="sd[b-z]?",SUBSYSTEM=="block",RUN+="/usr/local/src/mountusb.sh %k $env{ACTION}"
KERNEL=="sd[b-z]",SUBSYSTEM=="block",RUN+="/usr/local/src/mountusb.sh %k $env{ACTION}"
因为本地磁盘是sda 所以从b开始
支持ntfs格式需要安装ntfs-3g 包存在扩展源,所以要先安装epel-release,然后编写自动挂载脚本
yum install epel-release -y
yum install ntfs-3g -y vim /usr/local/src/mountusb.sh #!/bin/sh
DEV_NODE="/dev/"$
MOUNT_NODE="/mnt/"$
echo -e "$(date) \n $2 " >> /tmp/mount.txt
if [ $ == "add" ]; then
test ! -e $MOUNT_NODE && mkdir $MOUNT_NODE
ntfs-3g -o sync $DEV_NODE $MOUNT_NODE || mount -o sync -o iocharset=utf8 $DEV_NODE $MOUNT_NODE
#fi
elif [ $ == "remove" ]; then
umount -l $MOUNT_NODE
rm -fr $MOUNT_NODE
fi
centos7的udev有时候mount不成功
原因:默认是slave
MountFlags=
需要挂载传播标志: shared,slave或者 private,它控制在文件系统命名空间中建立了本单位的坐骑流程是否接收或传播的挂载或卸载。见 安装(2) 了解详细信息。默认为shared。使用 shared以确保挂载和卸载从主机到容器,反之亦然传播。使用 slave运行流程,使他们没有装载和卸载的将传播到主机。使用 private也确保没有从主机装载和卸载将传播到本机的进程“的命名空间。请注意,slave是指安装在主机上的文件系统可能保持持续固定在该单位的命名空间,从而保持该设备忙。请注意,文件系统命名空间相关的选项(PrivateTmp=, PrivateDevices=, ProtectSystem=, ProtectHome=, ReadOnlyPaths=,InaccessiblePaths=和 ReadWritePaths=)要求安装,并从单位的文件系统命名空间卸载传播被禁止,因此降级shared到 slave。
解决方法:
cp /usr/lib/systemd/system/systemd-udevd.service /etc/systemd/system
sed -i 's/MountFlags=*.$/MountFlags=shared/g' /etc/systemd/system/systemd-udevd.service
使用udev实现显示器的热插拔和usb的自动挂载的更多相关文章
- 树莓派USB存储设备自动挂载并通过脚本实现自动拷贝,自动播放视频,脚本自动升级等功能
需求:首先需要树莓派自动挂载USB设备,然后扫描USB指定目录下文件,将相关文件拷贝至树莓派指定目录,然后通过omxplayer循环播放新拷贝文件视频 1. 树莓派实现USB存储设备自动挂载 树莓派U ...
- 关于实现udev/mdev自动挂载与卸载
在网上有很多关于讲mdev的自动挂载基本上都是一个版本,经过测试自动挂载确实可行,但是关于自动卸载mdev似乎不能很好的支持,经过修改已经可以做到与udev的效果相似.不能在挂载的目录中进行热插拔,否 ...
- linux udev 自动挂载 SD卡/U盘
本文记录使用udev自动挂载SD卡和U盘的方法. 参考链接 http://blog.chinaunix.net/uid-26119896-id-5211736.html 添加udev规则 创建文件/e ...
- 树莓派-USB存储设备自动挂载
简单介绍实现命令行下USB存储设备自动挂载的方法,Linux gnome/kde窗口环境下有移动存储的管理程序,可以实现自动挂载移动存储设备,但是在命令行下 通常需要用mount命令手动挂载USB存储 ...
- 在GNU/Linux下使用命令行自动挂载与卸载USB磁盘
在命令行环境下如果每次都是靠手动敲入mount与umount命令来挂载与卸载USB磁盘是件很麻烦的事情.尤其是mount命令的参数非常多.比如,磁盘的分区类型(vfat.ntfs等),挂载的目录节点, ...
- kali Linux下wifi密码安全测试(1)虚拟机下usb无线网卡的挂载 【转】
转自:http://blog.chinaunix.net/uid-26349264-id-4455634.html 目录 kali Linux下wifi密码安全测试(1)虚拟机下usb无线网卡的挂载 ...
- 树莓派(Raspberry Pi)USB无线网卡自动连接,二代B
Raspberry Pi 使用USB无线网卡的时候不会因为路由重启而掉线. #!/bin/bash while true ; do if ifconfig wlan0 | grep -q " ...
- 【Raspberry Pi】USB无线网卡自动连接
Raspberry Pi 使用USB无线网卡的时候不会因为路由重启而掉线. #!/bin/bash while true ; do if ifconfig wlan0 | grep -q " ...
- 笔记本如何设置插入USB鼠标自动禁用触摸板
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Synaptics\SynTPEnh] [HKEY_LOCAL_MAC ...
随机推荐
- 8-06循环结构WHILE
WHILE 循环语句可以根据某些条件重复执行一条SQL语句或一个语句块. 语句: WHILE(条件) BEGIN 语句或语句块 END 程序调试: ALT+F5启动调试 F9切换断点 F10遂过程, ...
- 如何设置让基于matplotlib的绘图库正常的显示no-ascii字符(中文字符)
添加一句: import matplotlib matplotlib.rc('font', family='simhei') 其中family直接指示字体名字就行,比如simhei 注意:如果不能正常 ...
- 数据库错误:check the manual that corresponds to your MySQL server version for the right sy
检查对应到您的MySQL服务器版本附近使用正确的语法手册 数据库插入的时候出现上述问题,总结了两方面原因: 1.语法错误,这是百度之得到的大部分结果,但是没有解决我的问题 2.仔细观察我的sql语句, ...
- [leetcode] 题型整理之动态规划
动态规划属于技巧性比较强的题目,如果看到过原题的话,对解题很有帮助 55. Jump Game Given an array of non-negative integers, you are ini ...
- js整理4
异步处理 错误处理 同步 function A() { B(); } function B() { C(); } function C() { throw new Error('something h ...
- (iOS)项目总结-项目中遇到的各种的问题和解决方法
前言: 一到公司报道那时,便着手独立的去完成了一个项目,其中的辛酸泪也是不足为外人道也.这次算是一个新型的app,仍然是独立开发,但心境和想法却是完全的不同.下面说一次以前做开发时常常忽略的知识,也算 ...
- Spring Boot下配置MyBatis多数据源
http://m.blog.csdn.net/article/details?id=51481911
- Dijkstra算法初步 - 迷宫问题
你来到一个迷宫前.该迷宫由若干个房间组成,每个房间都有一个得分,第一次进入这个房间,你就可以得到这个分数.还有若干双向道路连结这些房间,你沿着这些道路从一个房间走到另外一个房间需要一些时间.游戏规定了 ...
- 【BZOJ】3993: [SDOI2015]星际战争
题意 \(m\)个人\(n\)个物品,第\(i\)个物品生命值为\(A_i\),第\(i\)个人每秒可以减少一个物品\(B_i\)的生命值,给出一个\(m \times n\)的矩阵,如果\(i\)行 ...
- SpringMVC中使用Interceptor拦截器
SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...