使用udev实现显示器的热插拔和usb的自动挂载

Posted 不会游泳的鱼pdj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用udev实现显示器的热插拔和usb的自动挂载相关的知识,希望对你有一定的参考价值。

udev:用来监听硬件设备是否发生改变,并可以给硬件设备命名 ,也可以在硬件发生改变之后执行脚本

使用udev检测显示器是否发生变化,然后执行脚本,解决linux显示器热插拔问题

先补充一点:

[[email protected] ~]# 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

缺点:每次插上显示器  都会回到登录页面,

可以使用xrandr的方式来显示。这样就不会回到登录页面

 

二: 使用udev解决usb自动挂载

vim /etc/udev/rules.d/100-mountsda.rules

1 KERNEL=="sd[b-z]?",SUBSYSTEM=="block",RUN+="/usr/local/src/mountusb.sh %k $env{ACTION}"
2 KERNEL=="sd[b-z]",SUBSYSTEM=="block",RUN+="/usr/local/src/mountusb.sh %k $env{ACTION}"

 因为本地磁盘是sda 所以从b开始

支持ntfs格式需要安装ntfs-3g 包存在扩展源,所以要先安装epel-release,然后编写自动挂载脚本

 1 yum install epel-release -y
 2 yum install ntfs-3g -y
 3 
 4 vim /usr/local/src/mountusb.sh
 5 
 6 #!/bin/sh
 7 DEV_NODE="/dev/"$1
 8 MOUNT_NODE="/mnt/"$1
 9 echo -e "$(date) \n $2 " >> /tmp/mount.txt
10 if [ $2 == "add" ]; then
11         test ! -e $MOUNT_NODE && mkdir $MOUNT_NODE 
12         ntfs-3g -o sync $DEV_NODE $MOUNT_NODE || mount -o sync -o iocharset=utf8 $DEV_NODE $MOUNT_NODE
13         #fi
14 elif [ $2 == "remove" ]; then
15         umount -l $MOUNT_NODE
16         rm -fr $MOUNT_NODE
17 fi

 

 

 

以上是关于使用udev实现显示器的热插拔和usb的自动挂载的主要内容,如果未能解决你的问题,请参考以下文章

usb 热插拔 linux

关于实现udev/mdev自动挂载与卸载

linux环境usb hub 下连接usb口和sd读卡器,sd卡热插拔的问题?

TCP/IP Over USB 用USB传输以太网数据,给你的MCU加个网卡

Linux USB U盘热插拔挂载和卸载

Linux上磁盘热插拔是啥意思