Como desabilito o botão de ejeção da unidade óptica do laptop e atribuo a ejeção a um atalho de teclado?

8

Nota: Resposta agora atualizada para funcionar sob 19.04

Estou no 14.04 e acidentalmente abro minha unidade de cd / dvd / bluray cerca de 20 vezes por dia. Analisei algumas perguntas aqui que não forneciam solução de trabalho.

Tanto esta questão como esta parecem desatualizadas - a solução oferecida não funciona.

Quando eu faço, eject -i onme deparo comeject: unable to find or open device for: 'cdrom'

Quando o faço, eject -i on /dev/sr0recebo uma resposta mais favorável: CD-Drive may NOT be ejected with device buttonno entanto, infelizmente, o botão ainda está ativado.

As informações de /proc/sys/dev/cdrom/infosugerem que o bloqueio é possível:

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

Esta resposta possui uma solução funcional que corrige uma regra UDEV para permitir o bloqueio da unidade. Adicionei algumas informações práticas à solução, permitindo:

  • Desativar o botão de ejeção do hardware da unidade óptica na inicialização
  • Adicione um atalho de teclado para ejetar a unidade óptica
  • Certifique-se de que a unidade permaneça travada após acordar da suspensão
Insperatus
fonte
1
Está funcionando para mim. você recarregou as regras do udev com "udevadm control --reload-rules" ???
solsTiCe 11/01

Respostas:

11

Ativar bloqueio da unidade

(nota: se eject -i onjá estiver funcionando, você pode pular para "Bloquear a unidade na inicialização")

Primeiro, copie /lib/udev/rules.d/60-cdrom_id.rulespara /etc/udev/rules.d/o seguinte:

cp /lib/udev/rules.d/60-cdrom_id.rules /etc/udev/rules.d/

Em seguida, edite o /etc/udev/rules.d/60-cdrom_id.rules e comente a linha problemática:

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

Localize esta linha:

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

Agora adicione um #(isso "comenta" a linha, anulando-a efetivamente sem excluir) na frente para torná-la assim:

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

Agora salve e feche pressionando Ctrl+ X, depois Ypara confirmar e depois Enterpara aceitar o nome do arquivo atual. Não se preocupe, pois ele aparece como um nome de arquivo temporário estranho, é assim que o sudoedit funciona.

Agora você deve poder desativar o botão de hardware da unidade óptica (basicamente estamos bloqueando a unidade) com isso:

eject -i on /dev/sr0~ ou ~ eject -i 1 /dev/sr0Eles fazem o mesmo.


Bloquear a unidade na inicialização

Para tornar isso mais útil, eu queria que esse comando tivesse efeito na inicialização. Eu usei o programa GUI "Startup Applications" (pré-instalado no Ubuntu, localize-o no Dash) para fazer isso.

Abra o programa e clique no botão "Adicionar", uma nova caixa de diálogo é aberta.

Digite um nome (fui com o descritivo "Bloquear unidade óptica") e, no campo "Comando:", digite bash -c 'eject -i on /dev/sr0'

Clique em "Adicionar" para concluir e feche o programa.


Adicionar um atalho de teclado

Agora a unidade óptica está bloqueada na inicialização. Mas como vou abrir a unidade quando precisar usá-la ?! Para simplificar, coloquei os comandos em um atalho de teclado "ejetar" que desbloqueia a unidade, ejeta a unidade e, em seguida, reinicia a unidade. Dessa forma, ainda posso acessar facilmente a unidade, mas o botão de hardware nunca é um problema.

Veja como realizar esse atalho de teclado:

  • Abra o programa "Teclado" encontrado no Dash.
  • Clique na guia "Atalhos"
  • Clique em "Atalhos personalizados" na parte inferior da lista
  • Clique no sinal "+", uma nova caixa de diálogo será aberta
  • Nomeie o atalho (usei "Desbloquear, Ejetar, CD de desbloqueio")
  • Digite isso no campo "Comando:":

    bash -c 'eject -i off /dev/sr0 && eject /dev/sr0 && eject -i on /dev/sr0'
    
  • Clique em "Aplicar"

  • Clique à direita do nome do seu atalho, onde diz "Desativado". Depois de clicar nele, "Desativado" muda para "Novo acelerador":

    Pressione a combinação de teclas que deseja usar. Eu usei Ctrl+ Alt+E

Você pode testar o atalho imediatamente. Se tudo estiver bem perto e pronto!


Bloquear unidade ao acordar da suspensão (método pré-systemd)

Percebi que minha unidade é desbloqueada novamente ao retomar a suspensão, por isso criei um script para garantir que a unidade permaneça bloqueada nesse caso.

Crie o arquivo de script:

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

Cole o seguinte no novo arquivo:

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

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

Bloquear unidade ao acordar da suspensão (método systemd)

Agora estou usando o 19.04 e notei que minha unidade estava sendo desbloqueada ao retomar a suspensão. Este método funciona para mantê-lo bloqueado:

Crie o arquivo de script:

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

Cole o seguinte no novo arquivo:

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

Salve e feche e está tudo pronto!

Insperatus
fonte
Um bom! (E não há necessidade de hacks tolos da vida! Excelente! ) Deseja que eu apague o que está com o alfinete?
Fabby
1
Obrigado! Tudo bem para mim deixar para as pessoas sem outra solução. É um outro significado de "hack" :)
insperatus
Aparentemente, a suspensão reverte e desbloqueia a unidade novamente.
Insperatus
existe algo chamado "script de suspensão / ativação" que é chamado durante a suspensão / ativação. Eu sugiro que você adicionar a sua solução lá também (eu não tenho o caminho absoluto para o script calhar, só sei que ela existe)
Fabby
1
Sim, eu presumi isso também. Verificando aqui e aqui por soluções.
Insperatus
1

Para mim, as informações aqui ajudam: https://bugs.launchpad.net/ubuntu/+source/eject/+bug/885051/comments/6

Eu editei o arquivo no diretório / lib / , não no / etc / Agora, no meu comando Ubuntu 14.04 funciona: eject -i 1 / dev / sr0

Dima
fonte
Infelizmente isso não funciona para mim.
Insperatus
funcionou para mim (Ubuntu 14.04 em um ThinkPad T420, editou o arquivo lib, como gonzo sugerido na barra de lançamento)
mondjunge
Na verdade, eu estava estragando a estrutura de diretórios, você estava no caminho certo com esta resposta!
Insperatus
1

Se todo o resto falhar:

Pegue um alfinete (não uma agulha, pois você se machucará), empurre-o firmemente atrás do botão na unidade de DVD e use-o como uma alavanca para puxar o botão. Em seguida, pegue um pequeno pedaço de plástico 1 mm mais largo e maior que o orifício resultante, coloque um pouco de super cola e cole no orifício, tomando cuidado para não colocá-lo sobre o orifício minúsculo ao lado .

A partir de agora, use os 2 métodos a seguir para abrir a unidade de DVD:

  1. Use o Ubuntu "Ejetar" através do traço
  2. Mantenha esse pino de segurança no seu PC a partir de agora e empurre-o para dentro do pequeno orifício próximo ao seu pedaço de plástico para ejetar o DVD quando o laptop estiver desligado. (Use um pedaço de fita adesiva para prender o pino de segurança na parte inferior do seu laptop)
Fabby
fonte
1
Mas destruir minha unidade de CD-ROM não é exatamente o que eu esperaria como resposta para bloquear a bandeja com SOFTWARE! Antes de fazer isso, eu pegava um pequeno pedaço de papelão, fazia um buraco em forma de botão e prendia-o com fita adesiva sobre o botão de ejeção para que tocá-lo acidentalmente, por exemplo, com o joelho, não o desencadeasse.
Byte Commander
@ByteCommander: é por isso que existe o enorme "se tudo mais falhar" como o título. Além disso, o pôster original já riu e já foi votado. No entanto, acho que seu truque de vida também merece uma resposta! Se você postar como resposta, acho que você receberá 2 votos positivos!
Fabby
Bom pensamento, mas não posso convertê-lo e não quero escrevê-lo novamente. Se isso ajuda alguém, tudo bem. E você pode votar também nos comentários. A propósito, como você quer saber se obteve seu voto no pôster da pergunta?
Byte Commander
@ByteCommander: Comentários positivos não recebem nenhum representante. Eu apenas voto positivo se não deixar outro comentário. É como um tapinha nas costas. E um comentário adicional é como um grande abraço! > :)
Fabby
@ByteCommander: Normalmente você não sabe quem votou em baixa / baixa, mas eu vi a votação inicial, fui à pergunta, fui à página de usuário do OP e vi "última atividade: 1 min". Então deduzi que era ele / ela e me deu um sorriso também.
Fabby
0

Tente fazer isso para que o botão não seja ejetado:

  1. Abra: Configurações do sistema > Teclado > Atalhos > Som e mídia

  2. Selecione "Ejetar" e limpe o atalho (pressionando "Backspace").

Você pode usar as configurações de atalho para fazer algo mais útil, como abrir um aplicativo comumente usado, bloquear sua tela ou redefinir seu wifi.


Fonte:

Eu tenho um MacBook Pro executando o 14.04 e o botão de ejeção está no topo de Excluir / Backspace, o que o pressiona facilmente acidentalmente (é pior para MacBooks sem unidades de disco em que esse botão é para energia). Utilizei as configurações de atalho para fazer com que o botão de ejeção bloqueie meu laptop. Usam esta solução desde 12.04 e tudo mais.

maki57
fonte
Isso não funcionou para mim, pois estou pressionando o botão na unidade real e não o botão do teclado.
Insperatus 13/01
0

Neste site , encontrei esta sugestão se eject -i 1não funcionar:
sudo echo 1 > /proc/sys/dev/cdrom/lockpara bloquear (0 em vez de 1 para desbloquear)
Existem outras opções discutidas também.

Aqui está um pequeno código-fonte c executando outra opção: link (observe a correção de bug para versões mais recentes nos comentários superiores!)

Mas li em alguns outros fóruns que todos esses comandos de ejeção alteram apenas o status de bloqueio da unidade quando um disco é inserido e montado. A única solução parece ser uma ferramenta chamada cdctl, mas não é muito compatível com muitos sistemas, como estudei os comentários.

Byte Commander
fonte