如何在安装 UOS 桌面版的笔记本电脑中实现光盘自动挂载?

2024-03-07 09:12

本文主要是介绍如何在安装 UOS 桌面版的笔记本电脑中实现光盘自动挂载?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

操作系统支持现状

插入光盘后,操作系统能够检测到并在桌面文件管理程序窗口中增加光盘图标,需要手动点击光盘图标才能够挂载

网上的方法

修改 /etc/fstab 文件

https://www.linuxquestions.org/questions/linux-newbie-8/automount-dvd-rom-when-dvd-is-inserted-455000/

https://askubuntu.com/questions/342188/how-to-auto-mount-from-command-line

目前看这种方式只能够解决开机自动挂载的问题,开机后才插入光盘不能自动挂载,需要再验证确认下。

autofs 实现光盘自动挂载

autofs 是一个自动挂载文件系统的工具,它可以根据需要自动挂载设备或目录,以便访问文件系统中的内容。它可以用来自动挂载光盘或其他可移动介质。

测试过程:

  1. 安装 autofs
  2. 修改 /etc/auto.master 配置,增加 /etc/auto.cdrom 配置,描述光盘自动挂载配置
  3. 重启 autofs 服务

测试结果:

  1. 在光盘插入后,需要主动访问配置文件中光盘挂载目录才能挂载,不访问不会挂载
  2. 可能需要多次访问才会触发挂载

初步测试确认 autofs 并不能实现自动挂载,网上搜索发现 autofs 支持自动挂载内容,一通尝试没有解决,暂且跳过。

思考

linux 发行版中一般通过 udevd 来实现热插拔事件的监测并根据规则执行相应的配置,能否通过修改 udevd 规则来实现自动挂载光盘呢?

UOS 中原生光盘热插拔事件处理规则

研究确定 /lib/udev/rules.d/80-debian-compat.rules 文件描述了这一规则,相关内容如下:

.....................................................................
ENV{ID_CDROM_DVD_RW}=="?*", \\PROGRAM="/bin/sh -c 'ln -s %k /run/udev/link.dvdrw 2>/dev/null; [ `readlink /run/udev/link.dvdrw` = %k ];", \\SYMLINK+="dvdrw", OPTIONS+="link_priority=-100"
.....................................................................

尝试修改 PROGRAM,在命令最后添加脚本,测试发现稳定性比较差,拔出光盘的处理也不正确。

增加自定义规则自动挂载光盘

搜索互联网并本地测试,最后增加了 /etc/udev/rules.d/99-cdrom.rules 配置文件来实现自动挂载光盘的动作,此文件内容如下:

ACTION=="add",ENV{ID_CDROM_DVD_RW}=="?*", \\PROGRAM="/bin/cdrom_mount.sh"ACTION=="remove",ENV{ID_CDROM_DVD_RW}=="?*", \\PROGRAM="/usr/bin/umount %E{DEVNAME}"

规则描述了在插入光盘时执行 /bin/cdrom_mount.sh 命令,在拔出光盘时执行 umount 命令卸载挂载点。测试发现需要同时修改 udevd systemd 服务的某项配置才能正常工作,最后选用了这种解决方案。

光盘自动挂载弹框问题

使用自定义规则挂载、卸载光盘后,UOS 桌面会弹框,提示卸载一个其它用户挂载的设备,需要认证。
研究相关原理,确定与 UDISKS 模块配置的 polikit 规则有关,相关规则位于 org.freedesktop.UDisks2.policy 文件中。
通过在 /etc/udev/rules.d/10-local.rules 文件中添加如下内容解决了此问题:

KERNEL=="sr*",ENV{UDISKS_IGNORE}="1"

上述配置告诉 udevd 对于 sr 开头的设备文件跳过 UDISKS 模块。

参考链接

https://wiki.archlinuxcn.org/zh-hans/Udisks

这篇关于如何在安装 UOS 桌面版的笔记本电脑中实现光盘自动挂载?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/783041

相关文章

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Python+PyQt5实现多屏幕协同播放功能

《Python+PyQt5实现多屏幕协同播放功能》在现代会议展示、数字广告、展览展示等场景中,多屏幕协同播放已成为刚需,下面我们就来看看如何利用Python和PyQt5开发一套功能强大的跨屏播控系统吧... 目录一、项目概述:突破传统播放限制二、核心技术解析2.1 多屏管理机制2.2 播放引擎设计2.3 专

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

SpringBoot中封装Cors自动配置方式

《SpringBoot中封装Cors自动配置方式》:本文主要介绍SpringBoot中封装Cors自动配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot封装Cors自动配置背景实现步骤1. 创建 GlobalCorsProperties

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

一文详解如何从零构建Spring Boot Starter并实现整合

《一文详解如何从零构建SpringBootStarter并实现整合》SpringBoot是一个开源的Java基础框架,用于创建独立、生产级的基于Spring框架的应用程序,:本文主要介绍如何从... 目录一、Spring Boot Starter的核心价值二、Starter项目创建全流程2.1 项目初始化(

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE