fc2ブログ

本を読む

読書やコンピュータなどに関するメモ

Linuxデスクトップの各種メディアプレイヤーをMPRISで制御するメモ

 Linuxデスクトップでは、さまざまなメディアプレイヤーをD-Busで制御するためのMPRIS(Media Player Remote Interfacing Specification)という規格があります。

 これを使ってメディアプレイヤーの再生と停止ぐらいを制御する方法を調べ、コマンドラインとEmacsから試してみます。

対象のメディアプレイヤー

 私の場合、とりあえずTotemとVLC、そしてFirefox上のメディア再生(YouTubeなど)を対象とします。

 Totemの場合は、プラグインの設定から「MPRIS D-BUsインターフェース」を有効にすると、MPRISでの制御に対応します。

 D-Busでのインターフェイスとなるバス名は、busctl listで探せます。MPRISのバス名は「org.mpris.MediaPlayer2.」で始まるようです(規格か慣例かは不明)。Totemでは「org.mpris.MediaPlayer2.totem」でした。

$ busctl --user list | grep -i MediaPlayer2
org.mpris.MediaPlayer2.totem                   2473780 totem          emasaka :1.13566      user@1000.service -       -

 同じことをEmacs Lispでするには、dbusをrequireして、dbus-list-namesを呼びます。なお、以降ではdbusがrequireされているものとします。

(require 'dbus)

(seq-filter (lambda (x) (string-match-p "MediaPlayer2" x))
            (dbus-list-names :session) )

;;=> ("org.mpris.MediaPlayer2.totem")

 VLCではバス名は基本的には「org.mpris.MediaPlayer2.vlc」です。

$ busctl --user list | grep -i MediaPlayer2
org.mpris.MediaPlayer2.vlc                     2475388 vlc            emasaka :1.13589      user@1000.service -       -

 ただしVLCでは、設定から「Allow only on instance」のチェックを外すと、複数インスタンスを開けます。その場合、2つめ以降は「org.mpris.MediaPlayer2.vlc.instance(数字)」となります。

$ busctl --user list | grep -i MediaPlayer2
org.mpris.MediaPlayer2.vlc                     2475388 vlc            emasaka :1.13589      user@1000.service -       -
org.mpris.MediaPlayer2.vlc.instance2476079     2476079 vlc            emasaka :1.13602      user@1000.service -       -

 Firefoxではバス名は「org.mpris.MediaPlayer2.firefox.instance(数字)」となります。ただし、Firefoxで複数の動画を開いていても、1つのバス名だけが表示されるようです。

$ busctl --user list | grep -i MediaPlayer2
org.mpris.MediaPlayer2.firefox.instance2447971 2447971 firefox        emasaka :1.13366      user@1000.service -       -

操作を調べる

 調べたバス名に対して呼び出せる操作(メソッド)を、busctl introspectで調べてみます。

$ busctl --user introspect org.mpris.MediaPlayer2.totem /org/mpris/MediaPlayer2
NAME                                TYPE      SIGNATURE RESULT/VALUE FLAGS
org.freedesktop.DBus.Introspectable interface -         -            -
.Introspect                         method    -         s            -
org.freedesktop.DBus.Properties     interface -         -            -
.Get                                method    ss        v            -
.GetAll                             method    s         a{sv}        -
.Set                                method    ssv       -            -
.PropertiesChanged                  signal    sa{sv}as  -            -
org.mpris.MediaPlayer2              interface -         -            -
.Quit                               method    -         -            -
.Raise                              method    -         -            -
org.mpris.MediaPlayer2.Player       interface -         -            -
.Next                               method    -         -            -
.OpenUri                            method    s         -            -
.Pause                              method    -         -            -
.Play                               method    -         -            -
.PlayPause                          method    -         -            -
.Previous                           method    -         -            -
.Seek                               method    x         -            -
.SetPosition                        method    ox        -            -
.Stop                               method    -         -            -
.Seeked                             signal    x         -            -

 org.mpris.MediaPlayer2.PlayerのPlayPauseというメソッドがありました。どうやら再生と停止のトグルのようです。

再生と停止を実行

 dbus-sendを使って、TotemのPlayPauseを呼び出してみます。

$ dbus-send --print-reply --dest=org.mpris.MediaPlayer2.totem /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause
method return time=1661306794.641280 sender=:1.13624 -> destination=:1.13643 serial=36 reply_serial=2

 これを実行するごとに、Totemの再生と停止が切り替わります。

 Emacs Lispでは、dbus-call-methodを呼びます。

(dbus-call-method
 :session
 (car (seq-filter (lambda (x) (string-match-p "MediaPlayer2\\.totem" x))
          (dbus-list-names :session) ))
 "/org/mpris/MediaPlayer2"
 "org.mpris.MediaPlayer2.Player" "PlayPause" )

再生位置を変更

 5秒送りや5秒戻しを試してみます。

 再生位置を変更できるかどうかは、CanSeekプロパティで調べられます。

 Totemではできます。

$ busctl --user get-property org.mpris.MediaPlayer2.totem /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player CanSeek
b true

 Firefoxではできません。

$ busctl --user get-property org.mpris.MediaPlayer2.firefox.instance2447971 /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player CanSeek
b false

 Seekメソッドに正のオフセット値を指定すると、そのぶん送られます。オフセット時間の単位はマイクロ秒(100万分の1秒)です。

$ dbus-send --print-reply --dest=org.mpris.MediaPlayer2.totem /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Seek int64:5000000
method return time=1661308135.256952 sender=:1.13624 -> destination=:1.13692 serial=98 reply_serial=2

 負のオフセット値を指定すると、そのぶん戻されます。

$ dbus-send --print-reply --dest=org.mpris.MediaPlayer2.totem /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Seek int64:-5000000
method return time=1661308271.529941 sender=:1.13624 -> destination=:1.13704 serial=101 reply_serial=2

 Emacs Lispだと、こんな感じです。

(dbus-call-method
 :session
 (car (seq-filter (lambda (x) (string-match-p "MediaPlayer2\\.totem" x))
          (dbus-list-names :session) ))
 "/org/mpris/MediaPlayer2"
 "org.mpris.MediaPlayer2.Player" "Seek" :int64 5000000 )

まとめ

MPRISでメディアプレイヤーを操作する方法の基礎を試しました。パラメータは少し複雑ですが、まあそんなものと思えば、やりかた自体は簡単です。

「Q.E.D. iff」22、「空のグリフターズ」4

 人気ミステリーコミック「Q.E.D. iff」と、コンゲーム冒険活劇「空のグリフターズ」の新刊が、今回も同時発売された。

 以下、ネタバレに気をつけているつもりだけど、未読の方は念のためご注意を。

 「Q.E.D. iff」は、「盗難、収賄そして殺人」「他人の生活」の2話を収録している。両作とも、推理する話であると同時に、推理とは何かについての話でもあると私は思った。あと、ビジュアル伏線。

 「盗難、収賄そして殺人」は、収賄事件にともなう秘書の“自殺”という過去の事件と、宝石の盗難という現在の事件、そしてお人好し刑事を結んだ話だ。「捕まえたもん勝ち」シリーズのキックがゲスト出演している。

 人は一般に、Aと言われていたものがBとも考えられるとなると、それだけでBが正しいんじゃないかと考えることがある。これは単なる仮説にすぎず、Aの可能性をきちんとつぶすのが推理だ。

 本作では、“自殺”事件のだいたいのところは最初から見当がつくようになっている。そこへ、塔馬君が真相を推理する。

 「他人の生活」は、亡くなった医師が遺した古伊万里の器が行方不明になり、妻や孫、近所の人たちをまじえて騒ぎになる話。

 この部分はネタバレというほどでもないと思うので書いてしまうと、最初から孫が怪しく描かれている。また、物語のパターン(テンプレ)としてそれはヒッカケなんじゃないかという可能性も想像される。それに対して塔馬君が、犯人探しというテンプレを超えたところで真相を推理する。

 「空のグリフターズ」は、いよいよ幽霊銀行が始動する。現役復帰したヒギンズの切れ者ぶりと、ガブリエルの頭の回転の早さ。

 そこに里帰りイベントが発生。海路の謎と、空の島への思い。そして風月の過去が少しずつ明らかになる。

 最後のほうで新キャラとして登場したCIAの強気なお姉さんが、アメリカドラマの敵キャラっぽい感じで、次の展開にも期待。

Firefoxで「タブを一覧表示します」を常に表示する

 Firefoxでは、タブが多くなって1つ1つが小さくなると、右端に「˅」ボタン(「タブを一覧表示します(List all tabs)」ボタン)が表示されます。これをクリックすると、メニューからタブを選べます。

 このボタンを常に表示するには、about:configやuser.jsなどから、browser.tabs.tabmanager.enabledをtrueに設定します。

「タブを一覧表示します」ボタン

参考:

「室町は今日もハードボイルド」

 中世の武士は江戸時代の武士と違って蛮族だったとか、いや庶民も蛮族だったとかいうことが、最近はよく言われるようになってきた。

 そんな中世の日本人の行動について、「世界の辺境とハードボイルド室町時代」の片方である清水克行氏が、一般向けにライトに面白く解説する日本史読み物。

 タイトルや表紙イラストはバイオレンス方面の印象で、確かにそういう要素は多いんだけど、それに限らず現代と違う中世の価値観を表した歴史上のエピソードを取り上げている。

 たとえば、升の大きさというと豊臣秀吉が統一した話が知られている。これは、平安時代の後三条帝など統一しようという試みが何度かあったそうだけど、伝統や利害関係により猛反発にあって、受け入れられなかったのだとか。

 大きさだけでなく、10合で1升に繰り上がるとは限らず、8合とか6合とか13合とか土地に違いがあったなんて話も。そうしたローカルルールは法にも及び、「人を買い取ったら、ふたたび返さない」というルールも人買いにとっては成り立っていたという。

 そもそも犯罪はケガレということで、喧嘩による殺人ではその場にいた人も罰せられたなんて話も。

 ということで、現代とは違う中世の価値観が面白かったけど、いやー本当に自分は現代に生まれてよかったと思った。

「絶滅動物物語」

 人間によって絶滅させられた8種類の動物を物語にした、1話完結のマンガ短編集。

 第1話のステラーカイギュウの優しい生態から苦い気持ちにさせられるし、第2話のモーリシャス・ドードーののんびりした様子が切ない。

 さらに第4話のオオウミガラスでは絶滅種を博物館が収集し、第5話のピレネーアイベックスでは絶滅種をクローンで蘇えらせようとするが……

だがな、

人の手はそれほど大きくはないぞ。

 なんというか、人間の残虐さというのではなく(そういう要素もあるけど)、ある意味で何気ないところから絶滅させてしまう、皮肉な感じで描かれている。一言でいうと「人間は愚かだなあ」と(自分もその一人として)。

「新仮面ライダーSPIRITS」31巻

 巻頭でまとめられているように、阿修羅谷、木更津、ISSと分かれて戦うところに、ストロンガーが帰還。ZXは地球に帰還すべく、時空をさまよう。

 そして、ライダーシンドロームに向けてライダーたちが集結していく。

お前が……

カメンライダー1号か……

「さばの缶づめ、宇宙へいく」

 野口聡一宇宙飛行士も、先日の前澤氏も、ISSで鯖缶を食べていた。この宇宙食の鯖缶を高校生たちが開発した14年間を描いたノンフィクション。

 新任教師が高校に赴任してみたら荒れた学校で、そこからじっくり教育やプロジェクトに取り組んで……という、「スクールウォーズ」+「宇宙兄弟」のような話で、波瀾万丈の奮闘記だった。ただし、荒れてる様子は主題じゃないのでそんなに描かれてないし、エピローグにもあるように、それぞれの生徒を掘り下げるというより先生のほうを中心にもってきた感じ。

 プロジェクトの話でいうと、HACCP認証を取得するのに、普通だと金属探知機を備えなくてはならくて金額的に手が出ないところを、包丁のほうを管理してクリアするという頓知が面白かった。あと、生徒を熱心に指導しすぎて“暗記で”高等学校発表大会で優勝したという苦い話なども(後日談もあり)。

 | HOME |  »

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly