我是比较新的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
变量未在任何地方设置。
通常,这是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之间的区别。我没有对任何测试蓝光东西。
解决了!
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这里变量的指针
希望这可以帮助
詹姆士