Làm cách nào để tắt nút ổ đĩa CD / DVD?


13

Cho đến khi Fedora 14 tôi sử dụng thành công cdctlđể bật / tắt nút nhả đĩa CD / DVD trên máy tính xách tay của mình (Thinkpad T410). Đáng buồn là nó đã ngừng hoạt động bây giờ.

Tôi đã tham khảo các phương pháp được thảo luận trong 2 câu hỏi sau:

Không ai trong số đó đã làm việc cho tôi. Vì vậy, tôi quay lại để cdctlxem liệu chúng ta không thể sửa chữa những gì bị hỏng với nó, vì nó đã hoạt động quá lâu.

Gỡ lỗi

Vì vậy, bắt đầu với các cdctlcông tắc tôi nhận thấy rằng hầu hết mọi thứ dường như chỉ hoạt động tốt.

Ví dụ

Những điều này làm việc.

đẩy ổ đĩa

$ cdctl -e

danh sách khả năng

$ 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

Theo danh sách đó cdctlthậm chí nghĩ rằng nó có thể bật / tắt nút nhả.

Can disable eject      : 1

Vì vậy, tôi tiếp tục với việc gỡ lỗi vấn đề.

Gỡ lỗi cdctl

Vì vậy, tôi con số cho phép làm một stracetrên cdctlđể xem nếu nó có thể làm sáng tỏ về những gì đang xảy ra.

$ 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 +++

Thật kỳ lạ có vẻ như cdctlnó nghĩ rằng nó vô hiệu hóa nút.

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

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

LƯU Ý: Nếu tôi hiểu quyền này, việc trả về 0 có nghĩa là nó đã thành công.

Một điều khiến tôi chú ý ở đây là danh sách các thiết bị cdctlđang cố gắng tương tác. Vì vậy, tôi nghĩ "nếu tôi thử các thiết bị này với eject" thì sao?

ra lệnh

Một trong những lệnh khác tôi từng sử dụng nhiều năm trước là ejectlệnh tương tác với thiết bị CD / DVD. Tôi nhận thấy rằng lệnh này bây giờ cũng có một chuyển đổi có tên tương tự:

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

Thí dụ

$ 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

Vì vậy, ejectcũng nghĩ rằng nó vô hiệu hóa nút, nhưng nó cũng không. Sử dụng straceở đây tôi thấy các cuộc gọi hệ thống tương tự:

$ 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

Vì vậy, bây giờ tôi đang tự hỏi nếu UDEV hoặc một cái gì đó khác có khả năng chặn hoặc chiếm quyền sở hữu thiết bị?

Suy nghĩ?


1
Tôi cũng có T410 và thường thấy mình nhấn nút nhả ổ đĩa CD khi không có ý định. Tôi sẽ quan tâm để xem nếu điều này được giải quyết.
WhiteHotLoveTiger

Nút vẫn hoạt động khi Đĩa trong ổ đĩa đó được gắn?
Bonsi Scott

1
Tôi cảm thấy bạn đau, tôi đã có cùng một vấn đề: Khóa ổ đĩa CD / DVD (ngăn chặn đẩy ra) . Tôi không tìm thấy giải pháp nào và cuối cùng đã gỡ bỏ ổ đĩa một cách vật lý, vì nó quá khó chịu khi ổ đĩa bật ra hàng chục lần mỗi ngày. Chúc may mắn ngày mai
Marco

@Marco - xem câu trả lời!
slm

@WhiteHotLoveTiger - xem câu trả lời!
slm

Câu trả lời:


9

Nhờ câu trả lời của @ Affix đã cho tôi hướng đi đúng đắn, tôi đã tìm ra giải pháp cho vấn đề.

Vấn đề chắc chắn là do UDEV gây ra như bạn đã đoán. Vấn đề là dòng này có trong hầu hết các tệp UDEV liên quan đến ổ đĩa cdrom.

Thí dụ

Trên Fedora 19 có tập tin sau đây /usr/lib/udev/rules.d/60-cdrom_id.rules. Trong tập tin này là dòng sau đây đồng chọn nút nhả đĩa cho các thiết bị CD / DVD.

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

Bạn có thể giải quyết vấn đề và vô hiệu hóa khả năng của UDEV để đồng chọn nút nhả bằng cách thực hiện như sau:

  1. Tạo một bản sao của tập tin 60-cdrom_id.rules

    $ sudo cp /usr/lib/udev/rules.d/60-cdrom_id.rules /etc/udev/rules.d/.
    
  2. Chỉnh sửa phiên bản sao chép của tệp này và nhận xét dòng chứa chuỗi , DISK_EJECT_REQUEST.

    $ sudoedit /etc/udev/rules.d/60-cdrom_id.rules
    
  3. Lưu tập tin và thay đổi sẽ được chú ý ngay lập tức!

Giải pháp trên khắc phục sự cố cho cả hai ejectcdctl. Vì vậy, bây giờ các lệnh sau hoạt động như mong đợi:

khóa ổ đĩa

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

-or-

$ cdctl -o1

mở khóa ổ đĩa

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

-or-

$ cdctl -o0

@Marco - Tôi bối rối không biết bạn đang hỏi tôi điều gì, tôi đã không thay đổi /lib/quy tắc. Tôi đã sao chép nó /etc/udev/rules.d/và tạo phiên bản ghi đè của riêng tôi.
slm

@Marco - NP, có nhiều chỗ để nhầm lẫn và mắc lỗi 8-)
slm

Cảm ơn vì điều đó. Xác nhận trong Debian hiện tại ổn định (8 / Jessie). Nhận xét rằng dòng đó ngay lập tức loại bỏ khả năng của tôi, ví dụ, vô tình đẩy Bluray trong khi nó được gắn hoặc thậm chí chơi. Phải yêu cách udevghi đè hành vi dự kiến ​​ở những nơi khác trong Linux ... Nhưng bây giờ tôi có thể để KDE xử lý việc phóng ra có chủ ý và ngừng lo lắng về tai nạn.
gạch dưới

2

Thêm dòng:

DISC_EJECT_REQUEST

các quy tắc udev CD ROM. Điều này sẽ cho phép bạn khóa với:

eject -i

1
Dòng thực sự cần phải được loại bỏ, ít nhất là trong trường hợp của tôi trên Fedora 19.
slm

Tương tự ở đây. Mặc dù vậy: Thêm nó vào tập tin nào? giữa những dòng khác? Đó có phải là toàn bộ dòng? Chắc chắn điều đó không hợp lệ về mặt cú pháp udev? vv - câu trả lời kém.
gạch dưới
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.