linux - Determine el tipo de medio óptico(CD de audio, DVD, blu-ray) usando UDEV y scripts
ubuntu sh (2)
Las variables no se establecen en ningún lugar.
Por lo general, esto se establece en la regla de inicio de udev (en /usr/lib/udev/rules.d/
), y se parece un poco a
# ID_CDROM_MEDIA_BD = Bluray
# ID_CDROM_MEDIA_DVD = DVD
# ID_CDROM_MEDIA_CD = CD
SUBSYSTEM=="scsi", KERNEL=="sr0", ENV{ID_CDROM_MEDIA_BD}=="1", RUN+="/home/user/ripping_script.sh"
Dado que udev
no conoce el tipo de medio de antemano , esto se establece manualmente como una variable de entorno. Pero como desea iniciar automáticamente un script diferente en ciertas condiciones, esto no es útil.
Sin embargo, también puede determinar y establecer las variables de tipo de medio en el script de copia:
Primero instale cdtool, le puede dar algo de información en los CD de audio (con cdir
). sudo apt-get install cdtool
Agregue esto al comienzo de su script:
#!/bin/bash
# ripping_script.sh
CDDVD=`cdir -vd /dev/sr0 2>&1 |grep -q "no_disc" || echo "cd"`
if [ $CDDVD ]; then
ID_CDROM_MEDIA_CD=1
echo "CD detected" >> $HOME/myscripts/scriptlogs/rip.log
else
ID_CDROM_MEDIA_DVD=1
echo "DVD detected" >> $HOME/myscripts/scriptlogs/rip.log
fi
# ... your rippingscript here
/dev/sr0
es más probable que su cd / dvd.
Esto solo diferencia entre audio CD y DVD. No tengo ningún blu-ray para las pruebas.
Soy relativamente nuevo en Linux después de haber cambiado de Windows a tener un centro multimedia sin cabeza. Estoy ejecutando KODIBuntu.
Estoy tratando de lograr un sistema de extracción automático para hacer una copia de seguridad de mi colección de medios de copia impresa. Me ha encantado el concepto con Linux de que ''si puedes soñarlo puedes hacerlo realidad''.
Lo que pretendo lograr es que se coloque un disco en la unidad y que un script extraiga el contenido de mi unidad.
por ejemplo, disco insertado -> tipo de medio determinado -> ejecución correcta del script de copia
He utilizado muchas páginas web útiles a través de búsquedas en Google para crear scripts que harán el trabajo de extracción en sí mismo. He leído un montón y me indicaron que usara ''HAL'' ... Luego descubrí que su función había sido rechazada y reemplazada por udev. Hice un montón de lecturas más, descubrí cómo usar UDEV y creé la siguiente regla que, según he comprobado, funciona al enlazar directamente con un script de copia.
ACTION=="change", SUBSYSTEMS=="scsi", KERNEL=="s[rg][0-9]*", ATTRS{vendor}=="TSSTcorp", MODE="0660", GROUP="optical", RUN+="/home/jlivin25/myscripts/DiscTypeTest.sh"
Me di cuenta de que necesitaba un script intermedio que hiciera el ''trabajo'' para determinar cuál es el tipo de medio óptico. Lecturas adicionales me llevaron a creer que necesitaría usar algún tipo de declaración "SI".
IF disco insertado luego IF audio cd run rip script 1 IF DVD run rip script 2 IF blu-ray run rip script 3 ELSE no cd insertado
He hecho más búsquedas en Google y he encontrado algún código en varios lugares que utiliza variables ambientales para trabajar. Sin embargo, de más información en google, parece que estas variables no están definidas hasta que UDEV hace referencia a ellas.
Mi enfoque habitual es construir una línea de código, ejecutar en el terminal y si obtengo lo que quiero, ¿puse todas las líneas juntas en un script de shell?
El código en el que estoy trabajando en el momento está abajo. Pensé que, lógicamente, si pudiera hacer que el script produjera lo que cree que está en la unidad en un archivo / registro, se ganaría la mitad de la batalla y podría sustituir esto por las ubicaciones de script que realizarían la tarea de extracción correspondiente. ¿Alguna gente de ideas sobre por qué esto no funciona como quiero?
He usado estas páginas para obtener información de:
- https://pathar.tl/blog/the-ultimate-automated-ripping-machine/
- https://askubuntu.com/questions/359855/how-to-detect-insertion-of-dvd-disc
Aquí está mi código:
#!/bin/bash
#
set -eu
#
# code below is derived from work by JimVanns, thanks
# https://github.com/jvanns/htpc/blob/master/dsc-trg-q
#
#
###########################################################################
### DEFINE VARIABLES HERE ###
### $HOME DOES NOT NEED DEFINING AS IT SEEMS TO BE BUILT INTO BASH FROM ###
### WHAT POSTS I HAVE READ RELATING TO USING WHAT I THINK ARE UDEV ###
### ENVIRONMENTAL VARIABLES E.G. $ID_CDROM_MEDIA_CD DO NOT APPEAR TO ###
### NEED DEFINING THEMSELVES, ALSO PART OF BASH OR LINUX COMMAND ###
### STRUCTURE CALLED BY BASH? ###
###########################################################################
#
MEDIA=
#
##############################################################################
### LEFT IN SO AS TO ALTER AS LITTLE AS POSSIBLE, I HAVE READ THAT DELAYS ###
### OFTEN IRON OUT KINKS IN CODE, PLUS ALSO FOUND IT USEFULL TO ALLOW A ###
### SMALL DELAY FOR CD-DRIVE TO DO ITS THING AFTER PUTTING DISK IN ###
##############################################################################
#
sleep 2
#
mkdir -p $HOME/myscripts/scriptlogs
#
#
if [ "$ID_CDROM_MEDIA_BD" = "1" ]
then
MEDIA=bluray
(
echo "$MEDIA" >> $HOME/myscripts/scriptlogs/DiscTypeTest.log
) &
if [ "$ID_CDROM_MEDIA_DVD" = "1" ]
then
MEDIA=dvd
(
echo "$MEDIA" >> $HOME/myscripts/scriptlogs/DiscTypeTest.log
) &
elif [ "$ID_CDROM_MEDIA_CD" = "1" ]
then
MEDIA=cdrom
(
echo "$MEDIA" >> $HOME/myscripts/scriptlogs/DiscTypeTest.log
) &
fi
Resuelto
La regla de Udev se ve así.
# ID_CDROM_MEDIA_BD = Bluray
# ID_CDROM_MEDIA_DVD = DVD
# ID_CDROM_MEDIA_CD = CD
ACTION=="change", SUBSYSTEMS=="scsi", KERNEL=="s[rg][0-9]*", ATTRS{vendor}=="TSSTcorp", ENV{ID_CDROM}=="?*", MODE="0660", GROUP="optical", RUN+="/usr/local/bin/DiscTypeTest3.sh"
y la secuencia de comandos para desencadenar la copia de comandos se ve así:
#!/bin/bash
# ID_CDROM_MEDIA_BD = Bluray
# ID_CDROM_MEDIA_DVD = DVD
# ID_CDROM_MEDIA_CD = CD
MEDIA=
if [ $ID_CDROM_MEDIA_DVD = "1" ]
then
MEDIA=dvd
(
echo "$MEDIA" >> "/var/log/DiscTypeTest.log"
) &
elif [ $ID_CDROM_MEDIA_CD = "1" ]
then
MEDIA=cdrom
(
echo "$MEDIA" >> "/var/log/DiscTypeTest.log"
) &
fi
(set -o posix ; set) > "/var/log/DiscTypeTestVariables.log"
Esto da como resultado la siguiente salida al archivo de registro cuando se inserta un CD de audio seguido de un DVD
cdrom
cdrom
dvd
dvd
Reemplazar las líneas de eco con la ruta para copiar scripts debería resultar en un sistema automatizado sin cabeza como se desee
El crédito es para Jim Vanns para el código, Keith_Helms y blm_ubunet en los foros de ubuntu para el código de posix y las correcciones a las declaraciones if y Ixer aquí para los punteros variables
Espero que esto ayude
James