如何在安装 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/725937.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

容量控制(Capacity Control)

容量控制(Capacity Control)是机器学习和深度学习中一项重要的概念,它涉及到调整模型的能力,使其既能够从训练数据中学习规律,又能够良好地泛化到新的、未见过的数据上。模型的“容量”指的是其拟合各种函数的能力。一…

Kap - macOS 开源录屏工具

文章目录 关于 Kap 关于 Kap Kap 是一个使用web技术的开源的屏幕录制工具 官网:https://getkap.cogithub : https://github.com/wulkano/Kap 目前只支持 macOS 12 以上,支持 Intel 和 Apple silicon 你可以前往官网,右上方下载 你也可以使…

案例介绍:信息抽取技术在汽车销售与分销策略中的应用与实践

一、引言 在当今竞争激烈的汽车制造业中,成功的销售策略、市场营销和分销网络的构建是确保品牌立足市场的关键。作为一名经验丰富的项目经理,我曾领导一个专注于汽车销售和分销的项目,该项目深入挖掘市场数据,运用先进的信息抽取…

EasyExcel3.1.1版本上传文件忽略列头大小写

1、背景 项目中使用easyExcel3.1.1版本实现上传下载功能,相关数据DTO以 ExcelProperty(value "dealer_gssn_id") 形式规定其每一列的名称,这样的话easyExcel会完全匹配对应的列名,即用户上传文件时,列名写成Dealer_…

利用websocket +定时器简易的实现一个网络聊天室

其实原理非常简单,就是客户端用户通过websoket来连接websocket服务端。然后服务端,收集每个用户发出的消息, 进而将每条用户的消息通过广播的形式推送到每个连接到服务端的客户端。从而实现用户的实时聊天。 // TODO : 我主要是讲一下实现思路。并未完善其功能。 1.后端 依赖 …

Java面试(2)之 多线程

线程池的结构及原理 一, 线程池的参数: corePoolSize: 线程池核心线程大小; 默认情况下这些线程不会被销毁,除非设置了allowCoreThreadTimeOut maximumPoolSize: 线程池最大线程数量 keepAliveTime: 空闲线程存活时间 TimeUnit: 空闲线程存活时间及单位 workQueue: 工作队…

使用数据库实现增删改查

#include<myhead.h>//定义添加数据函数int do_add(sqlite3 *ppDb) {//1.准备sql语句,输入要添加的信息int add_numb; //工号char add_name[20]; //姓名char add_sex[10]; //性别double add_score; //工资printf("请输入要添加的工号:")…

mysql数据库创建与删除

可以使用show databases语句来查看当前所有存在的数据库。 mysql> show databases; Database ---------- information_schema mysql performance_schema sys其中&#xff0c;mysql用来描述用户访问权限。 创建数据库 创建数据库可以使用create database命令。 例如&#…

恢复IDEA误删除的git提交,提交被删除,尝试恢复提交

​​​​​​ dgqDESKTOP-JRQ5NMD MINGW64 /f/IdeaProjects/workspace/spzx-parent ((8bb112e...)) $ git reflog 8bb112e (HEAD, origin/master, master) HEAD{0}: checkout: moving from master to 8bb112e5ac18dfe4bbd64adfd06363e46b609f21 8bb112e (HEAD, origin/master, …

微信小程序开发系列(二十一)·wxml语法·setData()修改数组类型数据(增加、修改、删除)

目录 1. 新增数组元素 方法一&#xff1a;push&#xff08;&#xff09; 方法二&#xff1a;concat() 方法三&#xff1a;ES6中的扩展运算符 ... 2. 修改数组元素 样式一&#xff1a;数字 样式二&#xff1a;元素 3. 删除数组元素 方法一&#xff1a;splice&#x…

vue2源码分析-vue入口文件global-api分析

文章背景 vue项目开发过程中,首先会有一个初始化的流程,以及我们会使用到很多全局的api,如 this.$set this.$delete this.$nextTick,以及初始化方法extend,initUse, initMixin , initExtend, initAssetRegisters 等等那它们是怎么实现,让我们一起来探究下吧 源码目录 global-…

Windows下 OracleXE_21 数据库的下载与安装

Oracle 数据库的下载与安装 数据库安装包下载数据库安装访问数据库进行测试Navicat连接数据库 1. 数据库安装包的下载 1.1 下载地址 Oracle Database Express Edition | Oracle 中国 1.2 点击“下载 Oracle Database XE”按钮&#xff0c;进去到下载页面&#xff08;选择对…

Stable diffusion零基础课程

该课程专为零基础学习者设计&#xff0c;旨在介绍和解释稳定扩散的基本概念。学员将通过简单易懂的方式了解扩散现象、数学模型及其应用&#xff0c;为日后更深入的科学研究和工程应用打下坚实基础。 课程大小&#xff1a;3.8G 课程下载&#xff1a;https://download.csdn.ne…

灵魂指针,教给(一)

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看&#xff0c;已成习惯 创作不易&#xff0c;多多支持&#xff01; 一、内存和地址 1.1 内存 在介绍知识之前&#xff0c;先来想一个生活中的小栗子&#xff1a; 假如把你放在一个有100间屋子的酒店…

第三讲 汇编初步 课程随手记

一、寄存器 32位CPU通用寄存器如下图所示&#xff1a; 因为教材依照的是32位CPU寄存器&#xff0c;而我安装的是64位寄存器&#xff0c;所以找了一下64位的寄存器的资料 PS&#xff1a;一般来说&#xff0c;Intel处理器字节存储顺序为小端法存储&#xff0c;是指数据的高字节保…

基于Skywalking开发分布式监控(四)一个案例

上一篇我们简单介绍了基于SkyWalking自定义增强的基本架构&#xff0c;即通过把Trace数据导入数据加工模块进行加工&#xff0c;进行持久化&#xff0c;并赋能grafana展示。 现在我们给出一个例子&#xff0c;对于量化交易系统&#xff0c;市场交易订单提交&#xff0c;该订单…

关于springboot一个接口请求后,主动取消后,后端是否还在跑

1、最近在思考一个问题&#xff0c;如果一个springboot的请求的接口比较耗时&#xff0c;中途中断该请求后&#xff0c;则后端服务是否会终止该线程的处理&#xff0c;于是写了一个demo RequestMapping(value "/test", method RequestMethod.GET)public BasicResul…

云消息队列 Confluent 版正式上线!

作者&#xff1a;阿里云消息队列 前言 在 2023 年杭州云栖大会上&#xff0c;Confluent 成为阿里云技术合作伙伴&#xff0c;在此基础上&#xff0c;双方展开了深度合作&#xff0c;并在今天&#xff08;3月1日&#xff09;正式上线“云消息队列 Confluent 版”。 通过将 Co…

android基础学习

从上面的描述就可以知道&#xff0c;每一个Activity组件都有一个对应的ViewRoot对象、View对象以及WindowManager.LayoutParams对象。这三个对象的对应关系是由WindowManagerImpl类来维护的。具体来说&#xff0c;就是由WindowManagerImpl类的成员变量mRoots、mViews和mParams所…

【Apache Camel】基础知识

【Apache Camel】基础知识 Apache Camel是什么Apache Camel基本概念和术语CamelContextEndpointsRoutesRouteBuilderComponentsMessageExchangeProcessorsDomain Specific Language&#xff08;DSL&#xff09; Apache Camel 应用执行步骤Apache Camel 示意图参考 Apache Camel…