• Linux初心者講座

    今までは自分のブログで書いてきた「Linux初心者講座」ですが、せっかく便利なフォーラムを準備していただきましたので、今後はこちらで展開させていただこうと思います。

    その記念すべき第一弾は...

    v0.9.1から実装されたバックアップ/リストアスクリプトをプラグインに実装しよう!

    です。
    コイツの利点は、“./plugins/.plugin.json”に必要な内容を追記することで、バックアップ/リストアスクリプトをsshログインすることなく、プラグインメニューから実行できるようになることです。

    まずsshでログインしていただき、次のコマンドを叩きます。

    nano ./plugins/.plugin.json
    

    ディレクトリの頭を“./”で始めていますが、これはユーザー“pi”のホームディレクトリー直下という意味で、パスを全部書くと...

    nano /home/pi/plugins/.plugin.json
    

    となります。

    “.plugin.json”に追加する内容は、私はこうしてみました。

    {
     "menu"   :"Save Backup",
     "active" :"yes",
     "icon"   :"save",
     "form"   :"",
     "command":"/home/pi/util-backup.sh",
     "output" :"",
     "success":"やったね!",
     "error"  :"error!"
    },
    {
     "menu"   :"Read MPD_Data",
     "active" :"yes",
     "icon"   :"open",
     "form"   :"",
     "command":"/home/pi/util-restore.sh --tag_cache",
     "output" :"",
     "success":"ごっつぁんです!!",
     "error"  :"error!"
    },
    {
     "menu"   :"Read Backup",
     "active" :"yes",
     "icon"   :"open", 
     "form"   :"",
     "command":"/home/pi/util-restore.sh  --conf",
     "output" :"",
     "success":"ゲップ!!",
     "error"  :"error!"
    }
    

    やったね!とかごっつぁんです!とか、ふざけた表現を含みますが、この辺は機能に関係ないところなので、それぞれ好きな文言にすればヨイと思います。

    注意点は...

    comma.jpg

    図の場所にカンマを追加するという点です。
    私は“.plugin.json”の末尾に追加しなかったのでカンマを2ヵ所追加していますが、末尾に追記する場合は、後ろのカンマは要りません。

    編集内容を上書き保存するために“ctrl”キーと“o”キーを押し...

    save.jpg

    が表示されてから“enter”キーを押します。

    次にテキストエディタ“nano”を終了するために“ctrl”キーと“x”キーを押します。
    これで作業は終了です。

    上手くいっていれば、メニューはこうなるはずです。

    plugin_menu_01.jpg
    plugin_menu_02.jpg

    下線を引いてあるところが、この作業で追加されたプラグインです。

    そして“Save Backup“を選択することでスクリプト“./util-backup.sh”が実行され、NAS上に2種類のバックアップファイルが作成されます。

    backup.jpg

    「5つやないかい!」とか「相変わらずアニソンばっかり聴いとんのかい!」というツッコミもあろうかと思いますが、これは私が4台のホスト名の違うSMPDを走らせているという変態環境だから。
    (同時にいずれか2台を走らせています)
    “backup_xxxx.tar.gz”の“xxxx”の部分に入っているのが、その4台それぞれのホスト名であり、それぞれの設定ファイル類を含むバックアップファイルとなります。

    conf.jpg

    何が保存されるのかは...

    cat ./util-backup.sh
    

    で確認することができます。

    これらは“Read Backup”を選択し“./util-restore.sh --conf”を実行させることで、勝手に当該のバックアップファイルを読み込ませることができます。

    そして図の一番下に見えているのは、tag_cacheのバックアップファイルで...

    tag_cache.jpg

    NASの楽曲データベースやプレイリストなどのバックアップファイルになっています。
    これも“Read MPD_Data”を選択することで“./util-restore.sh --tag_cache”が実行され、勝手に楽曲データベースやプレイリストがバックアップファイルから読み込まれるようになっています。

    こんな感じでどうでしょうか?
    分かりやすかったでしょうか?
    ここが違うとか、こうすればもっと分かりやすいんじゃないかとか、ご意見お待ちしています!

    追記

    パパリウスさんがjson構文のチェック方法を伝授してくださっています。

    jsonの解析には/usr/local/bin/jqを使っています。
    調べてみると、jqも簡易的な構文チェックに使えるようです。

    cat /home/pi/plugins/.plugin.json | jq .
    

    と実行すると、構文エラーがあれば

    parse error: Invalid numeric literal at line 1, column 4623
    

    という感じでエラーを表示してくれるようです。

    構文に問題なければ、jsonファイルの中身がそのまま表示されます。

    実際にある行末の「カンマ」を削除して

    cat /home/pi/plugins/.plugin.json | jq .
    

    してみたら

    parse error: Expected separator between values at line 206, column 12
    

    「あるべき206行目のセパレーター(カンマのことですね)に問題アリ」と正解が返ってきました。

    nano ./plugins/.plugin.json
    

    を実行した後は、念のためにコレでチェックですね。

  • 分かる方に教えていただきたいのですが、フォントサイズを変えるにはどうすればよいのでしょうか?
    タイトルの文字を大きくしたいのです。
    普通にタグを入力しても、大きくはならないのですよねぇ:anguished:

  • もじもじ

    ### もじもじ
    

    ではだめですか。
    #の数で大きさは変えられます。
    但し見出し用なので、一行の中を部分的に拡大することは出来ません。

    <span style=“font-size: 200%;”>もじもじ</span>
    

    は使えないかと試してみましたが駄目なようですね。

  • @ジャイアン さん

    v0.9.2からスクリプトの使い方が変わりましたが、丁寧に解説していただけて助かりました。

    文字の大きさですが、markdown記法で

    # でかい
    ## でかい
    ### でかい
    #### でかい
    

    という風に先頭に#をつけてください。

    <h1>でかい</h1>
    <h2>でかい</h2>
    <h3>でかい</h3>
    <h4>でかい</h4>
    

    というHTMLに解釈されて表示されます。

    nodeBBには、HTMLでの書き込みを許可する機能もあります。なんでも埋め込めるということはリスクもありますので、デフォルトでは無効になっています。
    markdown記法だけでは不便を感じるようでしたらご相談ください。

  • @yo さん @パパリウス さん

    アドバイス、ありがとうございます!

    大変に助かりました:+1:

  • @ジャイアンさん、いつもながら非常に判りやすい解説ありがとうございます。
    今まで触ったことがなかったのですが、さっそく、プラグインで遊んでいます。
    ごっつぁんです!の表現ツボにはまりました(^^♪

  • @hiroget9 さん

    お役に立てたようで何よりです。
    表現がオヤジで申しわけないっす!
    プラグインへの理解のみならず、バックアップ/リストアスクリプトの理解にも繋がれば幸いです:smile:

  • @ジャイアン さま
    こちらで、パパリウスさまが紹介頂いた.plugin.jsonの記述確認方法についても一応追記したほうが良いかと思います(自分で改変した場合、意外と書き損じ多そうな気がするので)。

  • @ジャイアンさん、user.jsで や も使えますね。

    遊んでいる間にいろいろ調べものして勉強になりました!

    現状、こんな感じです。
    f69008cf-73ec-41eb-af94-bdd72e5c233d-image.png

  • @sunatomo さん

    ご意見ありがとうございます!
    さっそく追記で対応しました。

    @hiroget9 少佐

    9課の荒巻です(嘘です):stuck_out_tongue_closed_eyes:
    コレ、何気に便利ですよね!
    私はuser.jsを使わずに、.plugin.jsonの最後に記述されているスクリプトの方をを利用しています。
    ところで“standalone”って「笑い男事件」の暗喩とSMPDの単機構成をかけてあるのかなぁ、なんて:grinning:

  • @ジャイアン さん
    結構便利になりました。
    pluginの構造も何となく判ってきたので、面白くなりますね!

    standalone 気付かれましたか(^_-)-☆ さすが課長!
    セパレートと単機の区別をどうしようかと考えていて、コレだねと(^^♪

  • @ジャイアン こんにちは。

    プレイリストをリピートさせたいので、昨夜、次のプラグインを追加したのですが、現在、リピート状態になっているかどうなのかが画面上表示できません。
    今だと、1回押したから有効だと覚えておかないといけないので、かえって不便かもしれません。
    状態を画面上表示させる方法をご存知でしたらお教えいただけないでしょうか?
    {
    "menu" :"Repeat",
    "active" :"yes",
    "icon" :"repeat",
    "form" :"",
    "command":"mpc repeat",
    "output" :"",
    "success":"success!",
    "error" :"error!"
    } ,

  • @hiroget9 さん
    すぐできると思います。
    帰宅しましたらちょっと作ってみますね。

    カバーアートが大きく表示される方の画面に、リピートのオンオフを行うボタンがあります。
    オンの時は色が変わるのですが、その操作をCSSのクラスで指定しているなら簡単です。
    これがID指定だった場合、かなり難易度が上がります。どのタイミングでオンオフの状態を表示に反映させるかというのがやっかいです。

  • @パパリウス さん、こんにちは。
    カバーアートが大きく表示される方の画面は、ほとんど見ていなかったので、気付いていませんでした(-_-;)
    私も後で確認してみます。
    長いことsmpdを使わせていただいているのに気づいていないとはお恥ずかしいです。
    画面を切り替えるだけで済むのでしたら、お手数をおかけするのが申し訳ないです。

  • @hiroget9 さん

    私もあまり見ない画面ですが、たまに左右にフリックして感触を楽しんでいます:grinning:

    まず、.plugin.jsonでmenuの文言を以下のように変更してください。で囲んでidを指定してあげると、user.js側で操作が楽になります。

    "menu"   :"<span id=repeat-state>Repeat<\/span>",
    

    次に、user.jsの最後に以下を追加してください。
    メニューのアイコン:fa-cog: をクリックするときに、リピートボタンがactiveになっているか確認して、id指定した文言を切り替えています。

    $('.dropdown-toggle').on('click', function (e) {
      if ($('#btnrepeat').hasClass("active")) {
        $('#repeat-state').text("Repeat OFF");
      } else {
        $('#repeat-state').text("Repeat ON"); 
      }
    });
    

    リピートが有効になっているときは、メニューは「Repeat OFF」、
    リピートが無効のときは、メニューが「Repeat ON」になります。


    user.jsを使えばWeb UIは好きなように変えることができます。
    例えば、Queue画面側にリピート切り替えボタンを増やすことも簡単に実現できます。

  • @パパリウス さん、お手を煩わせて申し訳ありませんでした。
    うまく表示できるようになりました。
    screenshot.jpg
    今回の件で、プラグインの勉強になりました。

    ありがとうございます。

    他にも応用できそうですね。

  • パパリウス さんにお教えいただき次のように変更しました。
    他の方にも参考になればと思い、ジャイアンさんの場をお借りして書き込ませていただきます。
    ジャイアンさん、お邪魔してすみませんm(__)m

    コマンド

    nano /home/pi/plugins/.plugin.json
    

    変更前

    , {
        "menu"   :"Repeat",
        "active" :"yes",
        "icon"   :"repeat",
        "form"   :"",
        "command":"mpc repeat",
        "output" :"",
        "success":"success!",
        "error"  :"error!"
      }
    

    ,
    変更後

    , {
        "menu"   :"<span id=repeat-state>Repeat<\/span>",
        "active" :"yes",
        "icon"   :"repeat",
        "form"   :"",
        "command":"mpc repeat",
        "output" :"",
        "success":"success!",
        "error"  :"error!"
      }
    

    コマンド

    nano /home/pi/plugins/demo/user.js
    

    変更後

    /* hide menu icon */
    $('.glyphicon-').parent().hide().parent().prev().hide();
    
    /* your script */
    $('.navbar-brand').append(' <b> SB32+PRO DoP</b> <i><u> standalone ip:192.168.3.14</u></i>');
    $('.dropdown-toggle').on('click', function (e) {
      if ($('#btnrepeat').hasClass("active")) {
        $('#repeat-state').text("Repeat OFF");
      } else {
        $('#repeat-state').text("Repeat ON");
      }
    });
    
  • @hiroget9 さん

    お邪魔どころか大歓迎です!
    こうした情報交換こそ、このフォーラムの一つの大きな目的ですし、これ自体がSMPDの大きな副産物とも言えると思います。
    今後もよろしくお願いいたします:blush:

  • @ジャイアン さん、ありがとうございます。

    プラグインの表示を状態によって変えることができるとは、思いもしませんでした。パパリウスさんから教えていただいた変更部分を見てみると、素人の私でも、なんとなく応用できそうな気がしています。
    ランダム再生なんかでもいけそうですね。

    こちらこそ、よろしくお願いいたします(^^♪

  • ジャイアンさん、またまたお邪魔しますm(__)m

    私はあまり使うことがないランダム再生ですが、簡単な応用編で、昨日の続きでプラグインの表示切替できるものを作ってみました。
    メニュー画面の表示が Random On ⇔ Random Off と切り替わります。

    コマンド

    nano /home/pi/plugins/.plugin.json
    

    追加する内容

    {
    "menu" :"<span id=random-state>Random</span>",
    "active" :"yes",
    "icon" :"random",
    "form" :"",
    "command":"mpc random",
    "output" :"",
    "success":"success!",
    "error" :"error!"
    },
    

    コマンド

    nano /home/pi/plugins/demo/user.js
    

    最後尾に追加する内容

    `$('.dropdown-toggle').on('click', function (e) {
    if ($('#btnrandom').hasClass("active")) {
    $('#random-state').text("Random OFF");
    } else {
    $('#random-state').text("Random ON");
    }
    });
    

    参考:リピートに追加しても大丈夫です。
    あと、メニューが多いと画面からはみ出ることがありますので、作り過ぎには注意です。