Как отключить кнопку извлечения дисковода для оптических дисков ноутбука и назначить ее для сочетания клавиш?

8

Примечание. Теперь ответ обновлен до 19.04.

Я на 14.04 и случайно открываю свой CD / DVD / Blu-ray диск около 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

Этот ответ имеет рабочее решение, которое фиксирует правило UDEV для включения блокировки диска. Я добавил практическую информацию к решению, что позволяет:

  • Отключите аппаратную кнопку извлечения оптического привода при запуске
  • Добавьте сочетание клавиш, чтобы извлечь оптический привод
  • Убедитесь, что диск остается заблокированным после выхода из режима ожидания
Insperatus
источник
1
это работает для меня. Вы перезагрузили правила udev с помощью "udevadm control --reload-rules" ???
SolsTiCe

Ответы:

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/

Затем отредактируйте /etc/udev/rules.d/60-cdrom_id.rules и закомментируйте проблемную строку:

sudoedit /etc/udev/rules.d/60-cdrom_id.rules

Найдите эту строку:

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

Теперь добавьте #(это «закомментирует» строку, фактически обнуляя ее без удаления) впереди, чтобы она выглядела так:

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

Теперь сохраните и закройте, нажав Ctrl+ X, затем Yподтвердите , затем подтвердите Enterтекущее имя файла. Не беспокойтесь, что оно выглядит как странное временное имя файла, именно так работает sudoedit.

Теперь вы сможете отключить аппаратную кнопку привода оптических дисков (по сути, мы блокируем диск) с помощью этого:

eject -i on /dev/sr0~ или ~ eject -i 1 /dev/sr0Они делают то же самое.


Блокировка диска при запуске

Чтобы сделать это более полезным, я хотел, чтобы эта команда вступила в силу при запуске. Для этого я использовал программу GUI «Startup Applications» (предварительно установленную в Ubuntu, найдите ее с помощью Dash).

Откройте программу и затем нажмите кнопку «Добавить», откроется новое диалоговое окно.

Введите имя (я использовал описательное «Блокировка оптического привода») и в поле «Command:» введите bash -c 'eject -i on /dev/sr0'

Нажмите «Добавить» для завершения, а затем закройте программу.


Добавить сочетание клавиш

Теперь оптический привод заблокирован при запуске. Но как мне открыть диск, когда мне нужно его использовать ?! Чтобы упростить процесс, я поместил команды в комбинацию клавиш «извлечь», которая разблокирует диск, извлекает диск и затем снова блокирует диск. Таким образом, я все еще могу легко получить доступ к диску, но аппаратная кнопка никогда не является проблемой.

Вот как сделать это сочетание клавиш:

  • Откройте программу «Клавиатура», найденную в Dash.
  • Перейдите на вкладку «Ярлыки»
  • Нажмите на «Пользовательские ярлыки» внизу списка
  • Нажмите на знак «+», откроется новое диалоговое окно
  • Назовите ярлык (я использовал «Unlock, Eject, Relock CD»)
  • Введите это в поле «Command:»:

    bash -c 'eject -i off /dev/sr0 && eject /dev/sr0 && eject -i on /dev/sr0'
    
  • Нажмите «Применить»

  • Нажмите справа от имени вашего ярлыка, где написано «Отключено». Как только вы нажмете на него, «Отключено» изменится на «Новый ускоритель»:

    Нажмите комбинацию клавиш, которую вы хотите использовать. Я использовал Ctrl+ Alt+E

Вы можете сразу же проверить ярлык. Если все хорошо, и все готово!


Блокировка диска после пробуждения из режима ожидания (метод pre-systemd)

Я заметил, что мой диск снова разблокируется после возобновления из режима ожидания, поэтому я создал скрипт, который гарантирует, что диск останется заблокированным в этом случае.

Создайте файл скрипта:

sudoedit /usr/lib/pm-utils/sleep.d/99lock-optical

Вставьте следующее в новый файл:

#!/bin/sh
# lock the optical drive upon resume from suspend

case "${1}" in
    resume|thaw)
        eject -i 1 /dev/sr0    
;;
esac

Блокировка диска после пробуждения из режима ожидания (метод systemd)

Я использую 19.04 сейчас и заметил, что мой диск разблокировался после возобновления из режима ожидания. Этот метод работает, чтобы он оставался заблокированным:

Создайте файл скрипта:

sudoedit /lib/systemd/system-sleep/00start_my_connection

Вставьте следующее в новый файл:

 #!/bin/sh
 if [ $1 = post ]
 then eject -i 1 /dev/sr0
 fi

Сохраните и закройте, и все готово!

Insperatus
источник
Неплохо! (И не нужно глупых лайфхаков! Отлично! ) Вы хотите, чтобы я удалил тот, который прикреплен булавкой?
Fabby
1
Спасибо! Я могу оставить это людям, у которых нет другого решения. Это еще одно целое значение "взломать" :)
Insperatus
Видимо приостановка возвращается и снова разблокирует диск.
Insperatus
есть нечто, называемое «сценарий приостановки / пробуждения», которое вызывается при приостановке / пробуждении. Я предлагаю вам также добавить ваше решение (у меня нет
подходящего
1
Да, я так и предполагал. Проверка здесь и здесь для решений.
Insperatus
1

Для меня информация здесь помогает: https://bugs.launchpad.net/ubuntu/+source/eject/+bug/885051/comments/6

Я отредактировал файл в каталоге / lib / , а не в / etc / Теперь в моей команде Ubuntu 14.04 работает: eject -i 1 / dev / sr0

Дима
источник
К сожалению, это не работает для меня.
Insperatus
работал для меня (Ubuntu 14.04 на ThinkPad T420, отредактировал файл lib, как предложил
gonzo
На самом деле я испортил структуру каталогов, вы были на правильном пути с этим ответом!
Insperatus
1

Если все остальное не удается:

Возьмите булавку (не иглу, которая поранит вас), плотно нажмите на нее за кнопкой на DVD-приводе и используйте ее в качестве рычага, чтобы вытащить кнопку. Затем возьмите небольшой кусочек пластика на 1 мм шире и больше полученного отверстия, нанесите на него немного супер-клея и приклейте его на отверстие , стараясь не положить его на крошечное отверстие рядом с ним .

С этого момента используйте следующие 2 способа, чтобы открыть DVD-привод:

  1. Используйте Ubuntu «Извлечь» через тире
  2. С этого момента держите этот хакерский штырь вокруг своего ПК и вставьте его в крошечное отверстие рядом с пластиковым элементом, чтобы извлечь DVD, когда ваш ноутбук выключен. (Используйте кусок клейкой ленты, чтобы прикрепить булавочный ключ к нижней части ноутбука)
Fabby
источник
1
Но уничтожение моего дисковода компакт-дисков - это совсем не то, чего я ожидал бы в качестве ответа на вопрос о том, как ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ-блокировка лотка! Прежде чем сделать это, я бы даже взял маленький кусочек картона, вырезал в нем отверстие, похожее на кнопку, и прикрепил его к кнопке извлечения так, чтобы случайное прикосновение к нему, например, коленом, не вызывало его.
Byte Commander
@ByteCommander: вот почему в заголовке есть огромное «если ничего не получится». Кроме того, оригинальный плакат уже получил смех от этого и уже проголосовал. Тем не менее, я думаю, что ваш лайфхак тоже заслуживает ответа! Если вы разместите это как ответ, я думаю, вы получите 2 отзыва!
Fabby
Хорошая мысль, но я не могу преобразовать это, и я не хочу писать это снова. Если это кому-нибудь поможет, то все в порядке. И вы также можете оставлять комментарии. Кстати, как вы хотите знать, что вы получили свой голос от постера вопроса?
Byte Commander
@ByteCommander: Upvoting комментарии не дают вам ни одного представителя. Я только добавляю комментарий, если не оставляю другой комментарий. Это как похлопывание по спине. И дополнительный комментарий, как большое объятие! > :)
Fabby
@ByteCommander: Обычно вы не знаете, кто голосовал за / против, но я увидел, что пришло upvote, перешел к вопросу, зашел на страницу пользователя OP и увидел «последнее действие: 1 минута». Так что я сделал вывод, что это он / она / она, и это тоже дало мне улыбку.
Fabby
0

Попробуйте сделать так, чтобы кнопка не извлекалась:

  1. Открыть: Системные настройки > Клавиатура > Сочетания клавиш > Звук и мультимедиа

  2. Выберите «Извлечь» и очистите ярлык (нажав «Backspace»).

Вместо этого вы можете использовать настройки ярлыков, чтобы сделать что-то более полезное, например, открыть часто используемое приложение, заблокировать экран или сбросить настройки Wi-Fi.


Источник:

У меня MacBook Pro под управлением 14.04, и кнопка извлечения находится прямо над Delete / Backspace, что делает его легким случайным нажатием (это хуже для MacBook без дисководов, где эта кнопка вместо Power). Использовал настройки ярлыков, чтобы кнопка извлечения заблокировала мой ноутбук. Использовали это решение с 12.04 и все промежуточное.

maki57
источник
Это не сработало для меня, так как я нажимаю кнопку на реальном диске, а не кнопку клавиатуры.
Insperatus
0

На этом сайте я нашел это предложение, если eject -i 1оно не работает:
sudo echo 1 > /proc/sys/dev/cdrom/lockзаблокировать (0 вместо 1, чтобы разблокировать).
Есть и другие возможные варианты.

Вот краткий исходный код c, выполняющий другую опцию: ссылка (обратите внимание на исправление для более новых версий в верхних комментариях!)

Но я читал на некоторых других форумах, что все эти команды извлечения изменяют состояние блокировки диска только тогда, когда диск вставлен и смонтирован. Кажется, единственным решением является инструмент под названием cdctl, но он не очень совместим со многими системами, как я изучал комментарии.

Byte Commander
источник