CD / DVDドライブのボタンを無効にするにはどうすればよいですか?


13

Fedora 14までcdctl、ラップトップ(Thinkpad T410)でCD / DVDイジェクトボタンを有効/無効にするのに成功していました。悲しいことに、今は機能しなくなっています。

次の2つの質問で説明されている方法を参照しました。

どれも私のために働いていません。それで、私cdctlはそれが長い間働いているので、私たちがそれで壊れているものを修正できないかどうかを確認するために振り返ります。

問題のデバッグ

それで、cdctlスイッチから始めて、私はほとんどのものがうまく働くように見えることに気付きます。

これらのことは機能します。

ドライブを取り出します

$ cdctl -e

リスト機能

$ cdctl -k
Tray close             : 1
Tray open              : 1
Can disable eject      : 1
Selectable spin speed  : 1
Is a jukebox           : 0
Is multisession capable: 1
Can read the MCN (UPC) : 1
Can report media change: 1
Can play audio discs   : 1
Can do a hard reset    : 1
Can report drive status: 1

そのリストによればcdctl、イジェクトボタンを有効/無効にできるとさえ考えています。

Can disable eject      : 1

そこで、問題のデバッグを続けます。

cdctlのデバッグ

それで、私はそれが何が起こっているかについていくらかの光を当てることができるかどうかを確認するためにstraceオンcdctlにすることができると思います。

$ strace cdctl -o1
...
brk(0)                                  = 0x1371000
open("/dev/cdrom", O_RDONLY|O_NONBLOCK) = -1 ENOENT (No such file or directory)
open("/dev/cd", O_RDONLY|O_NONBLOCK)    = -1 ENOENT (No such file or directory)
open("/dev/scd0", O_RDONLY|O_NONBLOCK)  = -1 ENOENT (No such file or directory)
open("/dev/sr0", O_RDONLY|O_NONBLOCK)   = 3
ioctl(3, CDROM_LOCKDOOR, 0x1)           = 0
close(3)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++

奇妙なことにcdctl、ボタンを無効にしているように思えます。

$ strace cdctl -o1
ioctl(3, CDROM_LOCKDOOR, 0x1)           = 0

$ strace cdctl -o0
ioctl(3, CDROM_LOCKDOOR, 0)             = 0

注:この権利を理解している場合、0が返されたことは成功したことを意味します。

ここで私の目を引いたものの1つは、cdctl対話しようとしているデバイスのリストです。だから私は「これらのデバイスを試してみるとどうなる」と思ったのejectですか?

排出コマンド

私が何年も前に使用していた他のコマンドの1つは、ejectCD / DVDデバイスと対話するコマンドでした。このコマンドにも同様の名前のスイッチがあることに気付きました。

$ eject --help
 -i, --manualeject <on|off>  toggle manual eject protection on/off

$ eject -i 1 /dev/sr0
eject: CD-Drive may NOT be ejected with device button

$ eject -i 0 /dev/sr0
eject: CD-Drive may be ejected with device button

だから、ejectあまりにも、それはボタンを無効だと思って、まだそれはどちらかではありません。straceここを使用すると、同じシステムコールが表示されます。

$ strace eject -i 1 /dev/sr0 |& grep ioctl
ioctl(3, CDROM_LOCKDOOR, 0x1)           = 0

$ strace eject -i 0 /dev/sr0 |& grep ioctl
ioctl(3, CDROM_LOCKDOOR, 0)             = 0

だから今、私はUDEVまたは他の何かが潜在的にデバイスのブロックまたは所有権を奪っているのだろうかと思っていますか?

考え?


1
私もT410を持っていますが、意外とCDドライブのイジェクトボタンを押すことがよくあります。これが解決されるかどうかを確認します。
WhiteHotLoveTiger

そのドライブのディスクがマウントされているときにボタンはまだ機能していますか?
ボンシスコット

1
私はあなたに痛みを感じます、私は同じ問題を抱えていました:CD / DVDドライブをロックします(イジェクトを防ぎます)。解決策が見つからず、ドライブを物理的に取り外すことになりました。1日に何十回もドライブをポップするのは面倒すぎるからです。幸運を…
マルコ

@Marco-答えをご覧ください!
slm

@WhiteHotLoveTiger-答えをご覧ください!
slm

回答:


9

正しい方向を示してくれた@Affixの答えのおかげで、私は問題の解決策を見つけました。

あなたが推測したように、問題は間違いなくUDEVによって引き起こされます。問題は、cdromドライブに関連するほとんどのUDEVファイルにあるこの行です。

Fedora 19には、次のファイルがあります/usr/lib/udev/rules.d/60-cdrom_id.rules。このファイルには、CD / DVDデバイスのイジェクトボタンを選択している次の行があります。

ENV{DISK_EJECT_REQUEST}=="?*", RUN+="cdrom_id --eject-media $devnode", GOTO="cdrom_end"

次の手順を実行することで、問題を回避し、イジェクトボタンを選択するUDEVの機能を無効にできます。

  1. ファイルのコピーを作成します 60-cdrom_id.rules

    $ sudo cp /usr/lib/udev/rules.d/60-cdrom_id.rules /etc/udev/rules.d/.
    
  2. このコピーされたバージョンのファイルを編集して、文字列を含む行をコメントアウトし、 DISK_EJECT_REQUEST

    $ sudoedit /etc/udev/rules.d/60-cdrom_id.rules
    
  3. ファイルを保存すると、変更がすぐに目立つはずです!

上記の解決策は両方の問題を修正します ejectとのcdctl。したがって、次のコマンドは期待どおりに機能します。

ドライブをロックする

$ eject -i on /dev/sr0
eject: CD-Drive may NOT be ejected with device button

-or-

$ cdctl -o1

ドライブのロックを解除します

$ eject -i off /dev/sr0
eject: CD-Drive may be ejected with device button

-or-

$ cdctl -o0

@マルコ-あなたが私に尋ねていることを混乱させている、私は/lib/規則を変えなかった。にコピーして/etc/udev/rules.d/、独自のオーバーライドバージョンを作成しました。
slm

@Marco-NP、混乱して間違いを犯す場所が十分にある8
slm

これをありがとう。現在のDebian安定版(8 / Jessie)で確認済み。その行をコメントアウトすると、たとえば、マウント中または再生中に誤ってBlurayをイジェクトすることができなくなりました。udevLinuxの他の場所で予想される動作をオーバーライドする方法が大好きです...しかし、KDEに意図的な排出を処理させ、事故の心配を止めることができます。
underscore_d

2

次の行を追加します。

DISC_EJECT_REQUEST

CD ROM udevルールへ。これにより、次のものでロックできます。

eject -i

1
実際には、少なくとものFedora 19の私の場合、削除されるために必要なライン
SLM

こっちも一緒。それでも:どのファイルに追加しますか?他のどの行の間?行全体ですか?確かにそれは構文的に有効ではありudevませんか?など-悪い答え。
underscore_d
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.