通过使用UDEV和脚本确定光学介质类型(音频CD,DVD,蓝光)

问题描述 投票:17回答:2

我是比较新的Linux作出从Windows切换到有一个无头的媒体中心。我正在KODIBuntu。

我想实现一个自动抓取系统备份我的硬拷贝媒体收藏。我曾经爱过的概念,Linux的,“如果你能想到它,你可以做到这一点。”

是我的目标实现是一个光盘放入驱动器,脚本撕内容到我的车程。

e.g盘插入 - >媒体类型确定 - >正确抓取脚本运行

我已经使用了很多有用的网页,通过谷歌搜索来创建脚本,将做翻录工作本身。我已经做了一堆阅读并指出对使用“HAL” ....我然后发现他的功能已被弃用,由udev取代。我做了一堆更多的阅读,并发现了如何使用udev和创造,我有通过直接链接到剥取的脚本证明作品如下因素规则

    ACTION=="change", SUBSYSTEMS=="scsi", KERNEL=="s[rg][0-9]*", ATTRS{vendor}=="TSSTcorp", MODE="0660", GROUP="optical", RUN+="/home/jlivin25/myscripts/DiscTypeTest.sh"

我意识到我需要一个中间的脚本,会做的“工作”,以确定光学媒体类型是什么。进一步阅读使我相信,我会需要使用某种形式的“IF”语句。

IF盘插入然后IF音频CD运行RIP脚本1 IF DVD运行RIP脚本2 IF蓝光运行RIP脚本3 ELSE无CD插入

我已经做了一些谷歌上搜索,发现在不同的地方的一些代码,使用环境变量工作。但是从谷歌更多的信息看来,这些变量都没有定义,直到UDEV引用?

我通常的做法是constuct一行代码,在终端上运行,如果我得到了我想要的话,我把所有的线一起在一个shell脚本?

我是一个做什么工作的代码如下。我虽然在逻辑上,如果我能得到脚本输出它认为是在驱动器中文件/日志一半会获胜,我会刚刚替补本作的脚本的位置,会做相应的翻录的任务..关于为什么这个任何想法人们不工作,因为我想要的吗?

我已经使用这些页面,从获取信息:

这里是我的代码:

#!/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
linux ubuntu sh udev
2个回答
4
投票

变量未在任何地方设置。

通常,这是asetting在启动的udev规则(在/usr/lib/udev/rules.d/),颇像

# 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"

由于udev不知道媒体类型提前,这是手动设置为一个环境变量。但既然你想自动启动在一定条件下不同的脚本,这是没有用的。

但是,你能确定,并在翻录脚本还设置介质类型变量:

首先安装cdtool,它可以给你的音频CD的一些信息(与cdir)。 sudo apt-get install cdtool

添加到您的脚本的开头:

#!/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是最有可能您的CD / DVD。

这只音频CD和DVD之间的区别。我没有对任何测试蓝光东西。


1
投票

解决了!

udev规则是这样的。

# 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"

和脚本触发翻录的脚本是这样的:

#!/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"

这将导致下面的输出时,音频光盘插入之后是DVD日志文件

cdrom
cdrom
dvd
dvd

与该路径替换回波行翻录脚本应导致自动化无头系统如所期望

幸得吉姆Vanns代码,Keith_Helms和blm_ubunet在Ubuntu论坛,POSIX代码和更正if语句和Ixer这里变量的指针

希望这可以帮助

詹姆士

© www.soinside.com 2019 - 2024. All rights reserved.