如何禁用笔记本光驱弹出按钮并将弹出分配给键盘快捷键?

Ins*_*tus 8 eject optical

注意:答案现已更新,可在 19.04 下运行

我在 14.04 上,每天不小心打开我的 cd/dvd/bluray 驱动器大约 20 次。我在这里查看了一些问题,但没有提供有效的解决方案。

无论这个问题,并且这个问题似乎已经过时-在提供的解决方案是行不通的。

当我这样做时,eject -i on我遇到了eject: unable to find or open device for: 'cdrom'

当我这样做时,eject -i on /dev/sr0我得到了更有利的回应:CD-Drive may NOT be ejected with device button但不幸的是,该按钮仍处于启用状态。

来自的信息/proc/sys/dev/cdrom/info表明锁定是可能的:

CD-ROM information, Id: cdrom.c 3.20 2003/12/17

drive name:             sr0
drive speed:            24
drive # of slots:       1
Can close tray:         1
Can open tray:          1
Can lock tray:          1
Can change speed:       1
Can select disk:        0
Can read multisession:  1
Can read MCN:           1
Reports media changed:  1
Can play audio:         1
Can write CD-R:         1
Can write CD-RW:        1
Run Code Online (Sandbox Code Playgroud)

这个答案有一个可行的解决方案,它修复了 UDEV 规则以启用锁定驱动器。我在解决方案中添加了一些实用信息,允许人们:

  • 启动时禁用光驱硬件弹出按钮
  • 添加弹出光驱的键盘快捷键
  • 确保驱动器从挂起状态唤醒后保持锁定

Ins*_*tus 11

启用锁定驱动器

(注意:如果eject -i on已经有效,您可以跳到“启动时锁定驱动器”)

首先,复制/lib/udev/rules.d/60-cdrom_id.rules/etc/udev/rules.d/喜欢这样:

cp /lib/udev/rules.d/60-cdrom_id.rules /etc/udev/rules.d/
Run Code Online (Sandbox Code Playgroud)

接下来,编辑 /etc/udev/rules.d/60-cdrom_id.rules 并注释掉有问题的行:

sudoedit /etc/udev/rules.d/60-cdrom_id.rules
Run Code Online (Sandbox Code Playgroud)

找到这一行:

ENV{DISK_EJECT_REQUEST}=="?*", RUN+="cdrom_id --eject-media $devnode", GOTO="cdrom_end"
Run Code Online (Sandbox Code Playgroud)

现在#在前面添加一个(这个“注释掉”该行,有效地使其无效而不删除)使其看起来像这样:

# ENV{DISK_EJECT_REQUEST}=="?*", RUN+="cdrom_id --eject-media $devnode", GOTO="cdrom_end"
Run Code Online (Sandbox Code Playgroud)

现在按Ctrl+保存并关闭X,然后Y确认,然后Enter接受当前文件名。不要担心它会显示为一个奇怪的临时文件名,这就是 sudoedit 的工作原理。

现在您应该能够通过以下方式禁用光驱硬件按钮(实际上我们正在锁定驱动器):

eject -i on /dev/sr0~或~eject -i 1 /dev/sr0他们也这样做。


启动时锁定驱动器

为了使它更有用,我希望这个命令在启动时生效。我使用 GUI“启动应用程序”程序(预装在 Ubuntu 中,使用 Dash 找到它)来完成此操作。

打开程序,然后单击“添加”按钮,打开一个新对话框。

输入名称(我使用描述性的“锁定光驱”)并在“命令:”字段中输入 bash -c 'eject -i on /dev/sr0'

单击“添加”完成,然后关闭程序。


添加键盘快捷键

现在光驱在启动时被锁定。但是当我需要使用它时,我将如何打开它?!为简单起见,我将命令放入“弹出”键盘快捷键中,该快捷键可解锁驱动器、弹出驱动器,然后重新锁定驱动器。这样我仍然可以轻松访问驱动器,但硬件按钮从来都不是问题。

以下是完成此键盘快捷键的方法:

  • 打开 Dash 中的“键盘”程序。
  • 单击“快捷方式”选项卡
  • 单击列表底部的“自定义快捷方式”
  • 单击“+”号,将打开一个新对话框
  • 命名快捷方式(我使用了“解锁、弹出、重新锁定 CD”)
  • 在“命令:”字段中输入:

    bash -c 'eject -i off /dev/sr0 && eject /dev/sr0 && eject -i on /dev/sr0'
    
    Run Code Online (Sandbox Code Playgroud)
  • 点击“申请”

  • 单击快捷方式名称右侧的“已禁用”。单击它后,“禁用”将更改为“新加速器”:

    按您要使用的组合键。我用Ctrl+ Alt+E

然后您可以立即测试快捷方式。如果一切顺利,你就大功告成了!


从挂起唤醒时锁定驱动器(预系统方法)

我注意到我的驱动器在从挂起恢复时再次解锁,因此我创建了一个脚本以确保在这种情况下驱动器保持锁定状态。

创建脚本文件:

sudoedit /usr/lib/pm-utils/sleep.d/99lock-optical
Run Code Online (Sandbox Code Playgroud)

将以下内容粘贴到新文件中:

cp /lib/udev/rules.d/60-cdrom_id.rules /etc/udev/rules.d/
Run Code Online (Sandbox Code Playgroud)

从挂起唤醒时锁定驱动器(systemd 方法)

我现在使用的是 19.04,并注意到我的驱动器在从挂起状态恢复时被解锁。此方法可使其保持锁定状态:

创建脚本文件:

sudoedit /lib/systemd/system-sleep/00start_my_connection
Run Code Online (Sandbox Code Playgroud)

将以下内容粘贴到新文件中:

 #!/bin/sh
 if [ $1 = post ]
 then eject -i 1 /dev/sr0
 fi
Run Code Online (Sandbox Code Playgroud)

保存并关闭,一切就绪!