在Mint 16中当按下光驱的弹出按钮后桌面上的光驱图标没有自动消失的问题解决

/*********************************************************************
 * Author  : Samson
 * Date    : 07/29/2014
 * Test platform:
 *              Mint 16
 *              GNU bash, version 4.2.45
 * *******************************************************************/

问题分析:

当按下存在光盘的光驱弹出按钮时,查看系统日志会有一个内核警告信息:

在mint中在/var/log/syslog中存在如下警告(错误)信息:

May 30 10:49:08 ufo kernel: [  147.793292] VFS: busy inodes on changed media or resized disk sr0

kernel表示这个问题是一个内核中报出的问题,VFS表示此问题是由虚拟文件系统触发的;

而此问题的本质是因为光驱的挂载点没有能够进行正常地umount造成的,可以在命令行使用mount命令查看到光驱的设备名sr0对应的mount点:

[email protected]:/var/log$ mount | grep sr0

/dev/sr0 on /media/ufo/Album VideoCDEx type iso9660 (ro,nosuid,nodev,uid=1000,gid=1000,iocharset=utf8,mode=0400,dmode=0500,uhelper=udisks2)

经在多个GNU Linux的上流及下流版本中进行测试,均存在此问题;

这个问题可能需要从内核进行解决,但是这TM将是一个很大的工程,巨坑呀…… 看代码……尝试修改……编译内核……内核替换……  折腾了几天,某些原因不再玩儿这条线了¥#@¥%%&……&

好吧,那再看看从应用层能不能解决这个玩意儿问题吧,发现当按下存在光盘的光驱弹出按钮时,桌面图标会变化,而且名称都变为CD Drive, 那只要找到图标变化的地方就应该能够进行umount操作了,而mint的管理桌面图标变化等操作的是nemo包,好吧,那就找找吧……&×

在nemo包中的 src/nemo-icon-view.c中找到了图标变化的相应函数:nemo_icon_view_file_changed()

经过调试,发现这是光驱图标发生变化的幕后凶手,然后再进行调试,找到了在桌面上的显示名称对应的结构,啊哈,这下终于能够修理你 :_)

直接贴代码吧,多说也没有什么必要了。

在nemo_icon_view_file_changed()中的原来的具体代码后添加如下代码:

char nocd[] = "CD Drive";

if(file->details->display_name != NULL && strncmp(file->details->display_name, nocd, strlen(nocd)) == 0)

{

char umountcmd[] = "umount `mount | grep /dev/sr0  | awk ‘{print $3}‘`";

char str2[] = "`mount | grep /dev/sr0 | awk ‘{print $4}‘`";

char str3[] = "`mount | grep /dev/sr0 | awk ‘{print $5}‘`";

char str4[] = "`mount | grep /dev/sr0 | awk ‘{print $6}‘`";

char mount[256] = {0};

int ret = system(umountcmd);

if(ret)

{

sprintf(mount, "%s?%s ", umountcmd, str2);

ret  = system(mount);

if(ret)

{

sprintf(mount, "%s?%s?%s ", umountcmd, str2, str3);

ret  = system(mount);

if(ret)

{

sprintf(mount, "%s?%s?%s?%s ", umountcmd, str2, str3, str4);

ret  = system(mount);

if(ret)

{

sprintf(mount, "%s?%s?%s?%s* ", umountcmd, str2, str3, str4);

ret  = system(mount);

}

}

}

}

}

那么再对以上代码稍微说明一下,umountcmd这个其实是对没有空格的光驱名已经足够了,而str2,str3,str4这是对有多个空格的光驱名而需要的。

细心的筒子们,后面的sprintf中的?是嘛意思? 其实就是个通配符,因为空格真TM的不知道杂个写到字符串中,转义/040 已经试过了,没有效果,只有用个?给替换了,有大侠若是对在这的空格能够进行处理的请给个回复呀,俺灰常想知道怎么破*_&

最后的sprintf中的*就是不想再取变态的空格名称的点了,直接通配弄死它。

用 ?和*的潜在问题是可能有一个U盘呀什么的类似的挂载点刚好是光驱的挂载名+任意字符,那么有可能弄死的就是其它设备了,但这事儿吧,概率真TM的还是相当小的。

PS: 修改后编译的时候会出错的,那么就请看上一篇中介绍的如何去解决了。

Done

在Mint 16中当按下光驱的弹出按钮后桌面上的光驱图标没有自动消失的问题解决

时间: 2024-08-26 07:37:59

在Mint 16中当按下光驱的弹出按钮后桌面上的光驱图标没有自动消失的问题解决的相关文章

在Linux Mint 16中找到保存的WiFi密码

当你使用 WEP,WPA 或 WPA2-PSK 连接到无线网络时,选择“自动连接”后密码将保存在Linux Mint(或任何其他的操作系统)中.试想一个情况,例如你需要提供密码给来访者,这时你需要知道WiFi密码,然而你有没有把它记下来.你可以轻松地找到之前连接的WiFi密码.下面我们将会指导你如何在 Linux Mint 16 中找到保存的 WiFi 密码.推荐学习Linux视频教程. 在 Linux Mint 中找到保存的 WiFi 密码: 找到保存的 WiFi 密码,其实过程非常简单.点击

[转]js中confirm实现执行操作前弹出确认框的方法

原文地址:http://www.jb51.net/article/56986.htm 本文实例讲述了js中confirm实现执行操作前弹出确认框的方法.分享给大家供大家参考.具体实现方法如下: 现在在删除或其它操作前弹出确定提示,我们有很多方法,最基本的就是利用js自带的函数confirm来操作了 最简单的用法如下: 鼠标事件使用confirm 复制代码 代码如下: <a href="#" onclick= "if(confirm( '是否确定! ')==false)r

SQL Server 2008 R2中,变表的右键弹出菜单中的“选择前1000行”为“选择所有行”

原文:SQL Server 2008 R2中,变表的右键弹出菜单中的"选择前1000行"为"选择所有行" 从SQL Server 2008开始,微软为了提高查询效率等原因,右键点击表时弹出菜单中默认没有"显示所有行",而以"选择前1000行"替代.这有时会为我们带来一些不便. 更改方法是:打开SQL Server Management Studio,依次点击"工具"菜单."选项",展开左

robotframework 下对于web弹出框的处理

转发自:http://www.cnblogs.com/dreamyu/p/6877145.html 在web自动化测试中会遇到各种弹出框,在selenium中有对这些弹出框的处理. 弹出框一般有这么几类: 1.普通的弹出窗口,如果是可以定位的,直接定位到窗口,然后进行相应的操作. 2.如果是浏览器系统弹出框,alter类型的,可以使用方法: dr.switchTo().alert().accept();   或者dismiss(取消),记得在处理前先判断下是否有alter窗口,如果窗口出来的较慢

Dephi中安装&quot;dpk&quot;包文件时弹出&quot;.. because it is not a design time package&quot;的对话框.

描述: Dephi中使用"dpk"包文件时点击"Compile"成功,点击"Install"弹出"dcGDIPlusD7.bpl can’t be installed because it is not a design time package"的对话框,怎么解决?这外包文件是从网上下的一个包文件. 解决方法: 在"Compile"和"Install"旁边有一个options点开后,选

JS学习笔记(一): 使用原生JS 实现导航栏下多级分类弹出效果

在给静态页面静添加交互效果时遇到的问题 : 鼠标划入二级菜单时 一级菜单样 ":hover" 式无法保持 情景如下: 解决思路: 利用二级菜单的onmouseover/out事件 重新构建一级菜单 ".hover" 样式类 代码如下: CSS部分: 在原来的目标:hover样式中 增加 .hover状态 li.app_jd a:hover,li.app_jd a.hover{ background-position: -126px -397px; } li.serv

css+html+js实现多级下拉和弹出菜单

本文将使用css+html+js实现横向菜单.具有多级弹出菜单下拉. 首先我们来看看效果图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvajkwMzgyOTE4Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" > 首先应该写html部分的代码,代码比較简单,代码例如以下: <body> <div id="men

【2017-05-21】WebForm跨页面传值取值、C#服务端跳转页面、 Button的OnClientClick属性、Js中getAttribute和超链接点击弹出警示框。

一.跨页面传值和取值: 1.QueryString - url传值,地址传值 优缺点:不占用服务器内存:保密性差,传递长度有限. 通过跳转页面路径进行传值,方式: href="地址?key=value&key=value"            用&可以实现传递多个值. 通过这种方式就把要传递的值传到要跳转的页面去了. 2.跨页面取值: 在跳转到的页面的C#代码服务端进行取值 用:  string value = Request["key"]; 二.

ios下input focus弹出软键盘造成fixed元素位置移位

正常状态下 input focus软键盘弹出时 问题描述: 头部结构fixed,滚动到下部内容区域,input.textarea等focus弹出软键盘时,头部位置偏移被居中(该问题ios7 beta3已修复),当软键盘关闭时,头部结构位置又恢复正常 安卓手机下,fixed表现要比ios好,不会出现此问题 然而在移动端里,基本上所有手机,页面滚动的时候,任何js都不会执行,所以寻找css的方法(且js方法比较消耗性能) 各类大网站的解决方法:一般是页面上避免悬挂元素,或者有悬挂元素时,避免产生软键