2018.03.01
recpt1で b25デコードに失敗(pcscにアクセスできない)
家の録画機が調子悪くなったので、最新の OSで更新。
いつも通り Fedora27で。fc17から色々と変わっているので簡単にまとめ。
LAMP環境はふつーに入れていく。今回 DBは MySQLから MariaDBに変更。とは言え中身は大して変わらないので MySQLと同じように dnfなりで入れて OK。
phpは 7.xがデフォルトになっているので remirepoから 5.6を入れる。と言うか、改変した epgrecが 7.0では動かないので。
# wget “https://rpms.remirepo.net/fedora/remi-release-27.rpm”
# rpm -Uvh remi-release-27.rpm
# dnf install –enablerepo=remi php56.x86_64 php56-php-cli.x86_64 php56-php-common.x86_64 php56-php-gd.x86_64 php56-php-mbstring.x86_64 php56-php-mysqlnd.x86_64 php56-php-pdo.x86_64 php56-php-pear.noarch php56-php-pecl-apcu.x86_64 php56-php-xml.x86_64
apache24から phpは fpm必須なので
# dnf –enablerepo=remi install php56-php-fpm.x86_64
/usr/bin/に php56のシンボリックリンクを作っとく。ちゃんと phpのバージョンと合わせないと×
pcsc関係は dnfで、pt3や arib25は適当にコンパイルしてインストール。
# systemctl start messagebus.service
# systemctl start pcscd.service
pcsc_scanで “Japanese Chijou Digital B-CAS Card…..”が出れば OK。上記二つのサービスを enableしておく。
まぁ、これでコンソールから若しくは suであれば recpt1で録画が出来るはず。
ところが、リモートシェルで入ったり、apacheユーザーやら epgrecで録画すると arib25デコードが出来ない。vlcで再生しようとしても DRMコンテンツと言うことでで真っ黒
$ recpt1 –b25 –strip 24 30 /tmp/test.ts
using B25…
enable B25 strip
pid = 14240
C/N = 24.452310dBbcas->init failed
Cannot start b25 decoder
Fall back to encrypted recording
うーん、b25デコードに失敗してる。カードリーダーも LED点きっ放しでアクセスしていない様子….
rootユーザなら問題なく b25デコードできるんだが???
で、journalctlでログを見ると
pcscd[14365]: 00000000 auth.c:137:IsClientAuthorized() Process 14374 (user: 48) is NOT authorized for action: access_card
pcscd[14365]: 00000270 winscard_svc.c:491:ContextThread() Rejected unauthorized client for ‘NTT Communications Corp. SCR3310-NTTCom USB SmartCard Reader …….
Authorizeできていないので B-CASカードにアクセスできないそうな。
さて本題、
pcsc関係はいつの間に access controlを取り入れているみたいだ。スマートカードなんで、まぁ当たり前と言えば当たり前なんだけど、地デジ以外でスマートカード使わないしw
どうやらコンソールユーザーや rootユーザー以外のアクセスには access ruleを書かないといけないらしい。redhatの Controlling access to smart cardsのページを参考に /usr/share/polkit-1/rules.dに apacheユーザーのルールを作成。
#vi apache.rule
polkit.addRule(function(action, subject) {
if (action.id == “org.debian.pcsc-lite.access_pcsc” &&
subject.user == “apache”) {
return polkit.Result.YES;
}
});
polkit.addRule(function(action, subject) {
if (action.id == “org.debian.pcsc-lite.access_card” &&
action.lookup(“reader”) == ‘NTT Communications Corp. SCR3310-NTTCom USB SmartCard Reader [Vendor Interface] 00 00’ &&
subject.user == “apache”) {
return polkit.Result.YES; }
});
reader==’NTT Communications ~~~~’は pcsc_scanで拾える Reader 0:のリーダーの名前をコピペで。
pscsd.serviceを再起動して…
$ recpt1 –b25 –strip 24 10 /tmp/test5.ts
using B25…
enable B25 strip
pid = 14393
C/N = 24.310654dB
Recording…
Recorded 11sec
今度は OK!
Trackback URL
Comment & Trackback
Comment feed
Comment