Yandex.Disk を試してみる

Yandex.Disk は Linux と BSD に ODF 閲覧機能まで!ってことでロシアでシェアの大きいらしい Yandex のアカウントを取ってみました.
# matoken 空いてた:)
##ここからアカウントを作ると +512MB
https://disk.yandex.com/invite/?hash=URJFTFG9

早速 Yandex.Disk に日本語の .odt をUp してみると,

20150918_05:09:39-19415
20150918_05:09:25-20153

  • 日本語ファイル名ok
  • ファイル一覧画面でのプレビューは日本語豆腐
  • ファイル閲覧ページはは日本語表示ok

という感じでした.

ファイル共有サービスの BSD サポートは実は WebDAV が使えるので Nautilus や Dolphin で繋いでねって感じでした.これはちょっとがっかり.WebDAV で OK だと Otixo や ownCloud 経由でかなりのサービスで対応出来てますね.

Linux のクライアントは .deb/.rpm のパッケージが提供されていて,.deb はリポジトリも用意されているので手間が省けていいです.但し Console client なので GUI がいい人は WebDAV でいいこともあるかもしれません.(サードパーティ製の GUI はあるみたい)

ちなみに Yandex は OSM にこういう貢献もしてるので好印象だったりします.

今のところ ODF の編集は ownCloud で簡易編集が可能,Microsoft OfficeOnline でも編集可能らしい(未検証).案外選択肢無いですね…….
Android/iOS 辺りのサポートもされると出先でのプレゼンテーションなどで便利になりそう.(でもこっちは無線プロジェクターの普及が進まないと利用者が増えないかな?)

翻訳ファイルの .ts の翻訳方法

翻訳ファイルの .tsPoedit では開けない.Qt Linguist というものが使えるそうなので Debian だと wheezy-backports 以降に存在する qttools5-dev-tools を導入する.

% sudo apt install qttools5-dev-tools
% /usr/lib/x86_64-linux-gnu/qt5/bin/linguist

20150917_18:09:30-3415

20150917_18:09:24-3340

翻訳して保存,「ファイル」->「リリース」で .ts から .qm が作られる.これをコピーして対象アプリケーションを起動すると翻訳が反映されるはず.

% sudo cp ./retext_ja.?? /usr/share/retext/locale

<追記>
コマンドラインで変換する場合は qtchooser パッケージに含まれる lrelease が利用できる.

% lrelease ./retext_ja.ts -qm ./retext_ja.qm

若しくは同パッケージの lconvert でもok.これは qm から ts への変換や pot / po / qph / xlf にも対応している.

% lconvert -i retext_ja.ts -o retext_ja2.qm
% lconvert -if qm -i retext_ja.qm -of ts -o retext_ja2.ts

</追記>

awesome wm の時計をカスタマイズ & メニューを最新に追従

20150912_00:09:11-13117

時計をカスタマイズ

デスクトップの右上に時計が表示されますが,秒が表示されません.ここに秒も表示したいです. `awful.widget.textclock() で実現しているようなのでここのパラメーターを変更することで実現できました.

Parameters:
 
format The time format. Default is " %a %b %d, %H:%M ".
timeout How often update the time. Default is 60.

以下のように書き換えました.

-- {{{ Wibox
-- Create a textclock widget
-mytextclock = awful.widget.textclock()
+mytextclock = awful.widget.textclock("%a %b %d, %H:%M:%S", 1)

規定値は %a %b %d, %H:%M", 60 で前半の " で囲ってある部分は date の FORMAT のようなので man date を参照して :%S を末尾に追加,後半の 60 は更新時間(秒)のようなのでこのままでは60秒に1回しか更新されないので1秒単位で更新されるように 1 を指定しました.

メニューを最新に追従するようにする

左上の awesome のメニューの Debian ツリーに導入されたアプリケーションメニューがありますが,awesome 初回実行時にコピーされたものが参照されます.そのためそれ以降に導入,削除したものは反映されません.大元の設定は随時反映されるのでそちらを参照するようにします.

  • 参照しているメニューファイル: ~/.config/awesome/debian/menu.lua
  • 元メニューファイル: /etc/xdg/awesome/debian/menu.lua

自分のホーム以下のメニューは削除してしまってシンボリックリンクを貼ることにします.

% rm -rf ~/.config/awesome/debian
% ln -s /etc/xdg/awesome/debian ~/.config/awesome/debian

メニューのカスタマイズは以下のような感じで rc.lua 内で行うようにしました.数が増えるようならファイルを分けるといいかもしれません.

+fav_menu = {
+   { "Nautilus", "nautilus" },
+   { "Atom", "atom" },
+   { "Chromium privacy", "/home/mk/script/chromium-privacy.bash" },
+   { "mikutter", "mikutter" },
+   { "LibreOffice", "libreoffice" },
+}
+
 mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon },
                                     { "Debian", debian.menu.Debian_menu.Debian },
+                                    { "fav", fav_menu },
                                     { "open terminal", terminal }
                                   }
                         })

全体の設定は以下の Gist を参照して下さい.

これまでの awesome 関連のエントリは以下を参照してください.

awesome wm の時計をカスタマイズ & メニューを最新に追従

20150912_00:09:11-13117

時計をカスタマイズ

デスクトップの右上に時計が表示されますが,秒が表示されません.ここに秒も表示したいです. `awful.widget.textclock() で実現しているようなのでここのパラメーターを変更することで実現できました.

Parameters:
 
format The time format. Default is " %a %b %d, %H:%M ".
timeout How often update the time. Default is 60.

以下のように書き換えました.

-- {{{ Wibox
-- Create a textclock widget
-mytextclock = awful.widget.textclock()
+mytextclock = awful.widget.textclock("%a %b %d, %H:%M:%S", 1)

規定値は %a %b %d, %H:%M", 60 で前半の " で囲ってある部分は date の FORMAT のようなので man date を参照して :%S を末尾に追加,後半の 60 は更新時間(秒)のようなのでこのままでは60秒に1回しか更新されないので1秒単位で更新されるように 1 を指定しました.

メニューを最新に追従するようにする

左上の awesome のメニューの Debian ツリーに導入されたアプリケーションメニューがありますが,awesome 初回実行時にコピーされたものが参照されます.そのためそれ以降に導入,削除したものは反映されません.大元の設定は随時反映されるのでそちらを参照するようにします.

  • 参照しているメニューファイル: ~/.config/awesome/debian/menu.lua
  • 元メニューファイル: /etc/xdg/awesome/debian/menu.lua

自分のホーム以下のメニューは削除してしまってシンボリックリンクを貼ることにします.

% rm -rf ~/.config/awesome/debian
% ln -s /etc/xdg/awesome/debian ~/.config/awesome/debian

メニューのカスタマイズは以下のような感じで rc.lua 内で行うようにしました.数が増えるようならファイルを分けるといいかもしれません.

+fav_menu = {
+   { "Nautilus", "nautilus" },
+   { "Atom", "atom" },
+   { "Chromium privacy", "/home/mk/script/chromium-privacy.bash" },
+   { "mikutter", "mikutter" },
+   { "LibreOffice", "libreoffice" },
+}
+
 mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon },
                                     { "Debian", debian.menu.Debian_menu.Debian },
+                                    { "fav", fav_menu },
                                     { "open terminal", terminal }
                                   }
                         })

全体の設定は以下の Gist を参照して下さい.

これまでの awesome 関連のエントリは以下を参照してください.

暗号化ファイルシステム EncFS の Reverse mode を試す

IMGP5154

EncFS という恐らく Linux のみで動作する暗号化ファイルシステムがあります.

<追記>
コメントで Windows の移植版を教えていただきました :)
EncFS4Winy ファイル暗号化 « 座間ソフト
</追記>

これは FUSE 経由で通常のファイルシステムの上に暗号化ファイルシステムを作成するもので,設定した暗号化領域のディレクトリを Encfs でマウントすることで透過的に暗号化ファイルシステムが利用できます.ただし,ファイル名暗号化時にはメタデータをファイル名に含めるためファイル名長が短く制限されるなどの制限はあります.このあたりは eCryptFS と同じですね.私はオンラインストレージ領域などに利用しています.(同期がファイル単位の場合 EncFS はお勧め)

オプションを眺めていて EncFS コマンドの --reverse というオプションに気づきました.

–reverse reverse encryption

Reverse mode
 
encfs --reverse provides an encrypted view of an unencrypted folder. This enables encrypted remote backups using standard tools like rsync.

この EncFS の Reverse mode はその名の通り,通常の非暗号化領域をマウントして EncFS による暗号化領域を提供してくれるようです.例えば rsync のバックアップ時に利用して,バックアップ経路からバックアップ先まで暗号化すると行ったことが出来ます.(タイムスタンプやパーミッションはそのままなので rsync の差分バックアップも問題なく行える)

利用例

初回起動時は要設定ですが,2回目からはパスワードの入力だけでOK です.

  • マウント対象: ~/
  • マウントポイント: /tmp/encfs
% mkdir -m 700 /tmp/encfs
% encfs -i 10 --reverse ~/ /tmp/encfs
新しい暗号化ボリュームを作成します。
Please choose from one of the following options:
 enter "x" for expert configuration mode,
 enter "p" for pre-configured paranoia mode,
 anything else, or an empty line will select standard mode.
?> x
 
手動設定モードが選択されました
以下の暗号アルゴリズムが使用できる :
1. AES : 16 byte block cipher
 -- 鍵長 128 から 256 ビットをサポート
 -- ブロックサイズ 64 から 4096 バイトをサポート
2. Blowfish : 8 byte block cipher
 -- 鍵長 128 から 256 ビットをサポート
 -- ブロックサイズ 64 から 4096 バイトをサポート
 
使用するアルゴリズムの番号を入力してください: 1
 
アルゴリズム "AES" が選択されました
 
鍵サイズをビット単位で指定してください。選択された
暗号アルゴリズムは 128 から 256 ビット (64 ビット間隔) の
鍵サイズをサポートしています。
例えば:
128, 192, 256
使用する鍵サイズ: 256
 
鍵サイズ 256 ビットを使用します
ブロックサイズをバイト単位で指定してください。選択された
暗号アルゴリズムは 64 から 4096 バイト (16 バイト間隔) の
ブロックサイズをサポートしています。
Enter を押すとデフォルト値 (1024 バイト) を使用します。
 
ファイルシステムブロックサイズ: 4096
 
ファイルシステムブロックサイズ 4096 バイトを使用します
 
以下のファイル名暗号アルゴリズムが使用できます:
1. Block : Block encoding, hides file name size somewhat
2. Block32 : Block encoding with base32 output for case-sensitive systems
3. Null : No encryption of filenames
4. Stream : Stream encoding, keeps filenames as short as possible
 
使用するアルゴリズムの番号を入力してください: 2
 
アルゴリズム "Block32" が選択されました"
 
reverse encryption - chained IV and MAC disabled
Enable per-file initialization vectors?
This adds about 8 bytes per file to the storage requirements.
It should not affect performance except possibly with applications
which rely on block-aligned file io for performance.
y/[n]: y
 
 
設定が完了しました。以下のプロパティのファイルシステムが
作成されます:
ファイルシステム暗号アルゴリズム: "ssl/aes", バージョン 3:0:2
Filename encoding: "nameio/block32", version 4:0:2
鍵サイズ: 256 ビット  
ブロックサイズ: 4096 バイト
Each file contains 8 byte header with unique IV data.
File holes passed through to ciphertext.
 
Now you will need to enter a password for your filesystem.
You will need to remember this password, as there is absolutely
no recovery mechanism.  However, the password can be changed
later using encfsctl.
 
新しい Encfs パスワード:
Encfs パスワードの確認:
% mount |grep -i encfs
encfs on /tmp/encfs type fuse.encfs (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
% ls /tmp/encfs
23GX4BPMMVSWOUUXIQCCX4EGI4BHG
24FEOFMBBK774KOXKO6CD5LVPB2JH
2ANNTH3275PXEFQCTLRIXDUBJFMPG
2B72K7FH3NZDIXX7S6P3FSMNCPIWL
2BX2O7FBGPIMLVQ66GD67O5MRYUJN
2GXZR6YY5C2T66GTHAOTBFDHHURZF
2HRGOCQRQI2FKQU5T4YR7X756KQ37IVWCWDUJIL7U4X5APCL4GH3ITX4QRWIDCLSZRTKWXVUA7WFVWME
2HUXRTPOJQFPEY7G62TCSD6BLXI6J
2JMEPULBHHVQVIOUHT2XEMVLD4BAO
2JTHYUVWCXXNYVAWGY4GIV4HGFMBL5BFRU7SGYGVHIR43ZOLVCEG5BA
2LFQK6EBYEOKU2UQV7F32ATU4XQF2EAOXKL75QXYUG4HKKRIADTIJGD
2NU47TEEVRXUIMWBMKGTPXJUEGCAM
2OI3GILDZS3UAMVQB4TL46DQCREKL
 :

アンマウント

% fusermount -u /tmp/encfs

2回目以降のマウント

% encfs -i 10 --reverse ~/ /tmp/encfs
EncFS パスワード:

問題なく利用できました.
ただ,注意しないといけなさそうな点が1つ.マウント時にパスワードだけでマウントするために暗号化情報を格納したデータの含まれたファイルが作成されるのですが,Reverse mode の場合このファイルも暗号化されてしまうのでこのファイルは別途バックアップを取っておいたほうが良いです.

オプションを覚えていればどうにかなりますがそうでないとオプションを試行錯誤しないといけないと思います.

<追記>
man を見るとマスターキーが含まれているのでこのファイルがなくなると復元できなくなるようです.注意しましょう.

Warning: If you lose the config file, the encrypted file contents are irrecoverably lost. It contains the master key encrypted with your password. Without the master key, recovery is impossible, even if you know the password.

</追記>

このファイルは EncFS 1.8.1 では .encfs6.xml です.(EncFS のバージョンにより数字部分は変わるようです)今回の例では ~/.encfs6.xml を別途バックアップします.

EncFS は他の暗号化ファイルシステムより弱い気がしていますが,この辺の柔軟さはいいですね.
出来れば他の OS にも対応してくれると利用範囲が広がって嬉しいのですが.

cowsay の COW をランダムに

cowsay では -f オプションで色々な COW を選択できます,

% cowsay -f suse The openSUSE is not OpenSUSE
 ______________________________
< The openSUSE is not OpenSUSE >
 ------------------------------
  \
   \____
  /@    ~-.
  \/ __ .- |
   // //  @
% cowsay -f duck ga~~~
 _______
< ga~~~ >
 -------
 \
  \
   \ >()_
      (__)__ _

この COW のリストは -l オプションで確認できます.

% cowsay -l
Cow files in /usr/share/cowsay/cows:
apt beavis.zen bong bud-frogs bunny calvin cheese cock cower daemon default
dragon dragon-and-cow duck elephant elephant-in-snake eyes flaming-sheep
ghostbusters gnu head-in hellokitty kiss kitty koala kosh luke-koala
mech-and-cow meow milk moofasa moose mutilated pony pony-smaller ren sheep
skeleton snowman sodomized-sheep stegosaurus stimpy suse three-eyes turkey
turtle tux unipony unipony-smaller vader vader-koala www

これをランダムに選択できないかと思ったのですがオプションに見当たりません.
ということでこんな感じで script を用意して,

#!/bin/bash 
 
COWS=( `cowsay -l | grep -v ^Cow | cut -f1-` )
cowsay -f ${COWS[$((RANDOM%${#COWS[@]}))]} $@

実行

% cowsay-random.bash hello!
 ________
< hello! >
 --------
  \
            .
       ___   //
     {~._.~}//
      ( Y )K/
     ()~*~()
     (_)-(_)
     Luke
     Skywalker
     koala
% cowsay-random.bash hello!
 ________
< hello! >
 --------
         \
          \
            ^__^
    _______/(oo)
/\/(       /(__)
   | W----|| |~|
   ||     || |~|  ~~
             |~|  ~
             |_| o
             |#|/
            _+#+_

fortune と繋いでみたり

% fortune /usr/share/games/fortunes | cowsay-random.bash -n
 _______________________________________________________________
/ Putt's Law:                                                   \
|         Technology is dominated by two types of people:       |
|                 Those who understand what they do not manage. |
\                 Those who manage what they do not understand. /
 ---------------------------------------------------------------
                       \                    ^    /^
                        \                  / \  // \
                         \   |\___/|      /   \//  .\
                          \  /O  O  \__  /    //  | \ \           *----*
                            /     /  \/_/    //   |  \  \          \   |
                            @___@`    \/_   //    |   \   \         \/\ \
                           0/0/|       \/_ //     |    \    \         \  \
                       0/0/0/0/|        \///      |     \     \       |  |
                    0/0/0/0/0/_|_ /   (  //       |      \     _\     |  /
                 0/0/0/0/0/0/`/,_ _ _/  ) ; -.    |    _ _\.-~       /   /
                             ,-}        _      *-.|.-~-.           .~    ~
            \     \__/        `/\      /                 ~-. _ .-~      /
             \____(oo)           *.   }            {                   /
             (    (--)          .----~-.\        \-`                 .~
             //__\\  \__ Ack!   ///.----..<        \             _ -~
            //    \\               ///-._ _ _ _ _ _ _{^ - - - - ~

login 時などに表示すると楽しいかもしれません.

cowsay 一覧

20150910_05:09:59-18564
Debian testing stretch に cowsay が降りてきたので久々に実行して遊んでみました.せっかくなので全部表示してみる.
実行は,% ls -1 /usr/share/cowsay/cows | xargs -n1 -I{} cowsay -f {} {} | xclip な感じで.

 _________
< apt.cow >
 ---------
       \ (__)
         (oo)
   /------\/
  / |    ||
 *  /\---/\
    ~~   ~~
 ________________
< beavis.zen.cow >
 ----------------
   \         __------~~-,
    \      ,'            ,
          /               \
         /                :
        |                  '
        |                  |
        |                  |
         |   _--           |
         _| =-.     .-.   ||
         o|/o/       _.   |
         /  ~          \ |
       (____@)  ___~    |
          |_===~~~.`    |
       _______.--~     |
       \________       |
                \      |
              __/-___-- -__
             /            _ \
 __________
< bong.cow >
 ----------
         \
          \
            ^__^
    _______/(oo)
/\/(       /(__)
   | W----|| |~|
   ||     || |~|  ~~
             |~|  ~
             |_| o
             |#|/
            _+#+_
 _______________
< bud-frogs.cow >
 ---------------
     \
      \
          oO)-.                       .-(Oo
         /__  _\                     /_  __\
         \  \(  |     ()~()         |  )/  /
          \__|\ |    (-___-)        | /|__/
          '  '--'    ==`-'==        '--'  '
 ___________
< bunny.cow >
 -----------
  \
   \   \
        \ /\
        ( )
      .( o ).
 ____________
< calvin.cow >
 ------------
 \                   .,
   \         .      .TR   d'
     \      k,l    .R.b  .t .Je
       \   .P q.   a|.b .f .Z%
           .b .h  .E` # J: 2`     .
      .,.a .E  ,L.M'  ?:b `| ..J9!`.,
       q,.h.M`   `..,   ..,""` ..2"`
       .M, J8`   `:       `   3;
   .    Jk              ...,   `^7"90c.
    j,  ,!     .7"'`j,.|   .n.   ...
   j, 7'     .r`     4:      L   `...
  ..,m.      J`    ..,|..    J`  7TWi
  ..JJ,.:    %    oo      ,. ....,
    .,E      3     7`g.M:    P  41
   JT7"'      O.   .J,;     ``  V"7N.
   G.           ""Q+  .Zu.,!`      Z`
   .9.. .         J&..J!       .  ,:
      7"9a                    JM"!
         .5J.     ..        ..F`
            78a..   `    ..2'
                J9Ksaw0"'
               .EJ?A...a.
               q...g...gi
              .m...qa..,y:
              .HQFNB&...mm
               ,Z|,m.a.,dp
            .,?f` ,E?:"^7b
            `A| . .F^^7'^4,
             .MMMMMMMMMMMQzna,
         ...f"A.JdT     J:    Jp,
          `JNa..........A....af`
               `^^^^^'`
 ____________
< cheese.cow >
 ------------
   \
    \
      _____   _________
     /     \_/         |
    |                 ||
    |                 ||
   |    ###\  /###   | |
   |     0  \/  0    | |
  /|                 | |
 / |        <        |\ \
| /|                 | | |
| |     \_______/   |  | |
| |                 | / /
/||                 /|||
   ----------------|
        | |    | |
        ***    ***
       /___\  /___\
 __________
< cock.cow >
 ----------
    \
     \  /\/\
       \   /
       |  0 >>
       |___|
 __((_<|   |
(          |
(__________)
   |      |
   |      |
   /\     /\
 ___________
< cower.cow >
 -----------
     \
      \
        ,__, |    |
        (oo)\|    |___
        (__)\|    |   )\_
             |    |_w |  \
             |    |  ||   *
 
             Cower....
 ____________
< daemon.cow >
 ------------
   \         ,        ,
    \       /(        )`
     \      \ \___   / |
            /- _  `-/  '
           (/\/ \ \   /\
           / /   | `    \
           O O   ) /    |
           `-^--'`<     '
          (_.)  _  )   /
           `.___/`    /
             `-----' /
<----.     __ / __   \
<----|====O)))==) \) /====
<----'    `--' `.__,' \
             |        |
              \       /
        ______( (_  / \______
      ,'  ,-----'   |        \
      `--{__________)        \/
 _____________
< default.cow >
 -------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
 ____________________
< dragon-and-cow.cow >
 --------------------
                       \                    ^    /^
                        \                  / \  // \
                         \   |\___/|      /   \//  .\
                          \  /O  O  \__  /    //  | \ \           *----*
                            /     /  \/_/    //   |  \  \          \   |
                            @___@`    \/_   //    |   \   \         \/\ \
                           0/0/|       \/_ //     |    \    \         \  \
                       0/0/0/0/|        \///      |     \     \       |  |
                    0/0/0/0/0/_|_ /   (  //       |      \     _\     |  /
                 0/0/0/0/0/0/`/,_ _ _/  ) ; -.    |    _ _\.-~       /   /
                             ,-}        _      *-.|.-~-.           .~    ~
            \     \__/        `/\      /                 ~-. _ .-~      /
             \____(oo)           *.   }            {                   /
             (    (--)          .----~-.\        \-`                 .~
             //__\\  \__ Ack!   ///.----..<        \             _ -~
            //    \\               ///-._ _ _ _ _ _ _{^ - - - - ~
 ____________
< dragon.cow >
 ------------
      \                    / \  //\
       \    |\___/|      /   \//  \\
            /0  0  \__  /    //  | \ \
           /     /  \/_/    //   |  \  \  
           @_^_@'/   \/_   //    |   \   \
           //_^_/     \/_ //     |    \    \
        ( //) |        \///      |     \     \
      ( / /) _|_ /   )  //       |      \     _\
    ( // /) '/,_ _ _/  ( ; -.    |    _ _\.-~        .-~~~^-.
  (( / / )) ,-{        _      `-.|.-~-.           .~         `.
 (( // / ))  '/\      /                 ~-. _ .-~      .-~^-.  \
 (( /// ))      `.   {            }                   /      \  \
  (( / ))     .----~-.\        \-'                 .~         \  `. \^-.
             ///.----..>        \             _ -~             `.  ^-`  ^-_
               ///-._ _ _ _ _ _ _}^ - - - - ~                     ~-- ,.-~
                                                                  /.-~
 __________
< duck.cow >
 ----------
 \
  \
   \ >()_
      (__)__ _
 _______________________
< elephant-in-snake.cow >
 -----------------------
       \
        \  ....
          .    ........
          .            .
          .             .
    .......              .........
    ..............................
Elephant inside ASCII snake
 ______________
< elephant.cow >
 --------------
 \     /\  ___  /\
  \   // \/   \/ \\
     ((    O O    ))
      \\ /     \ //
       \/  | |  \/
        |  | |  |  
        |  | |  |  
        |   o   |  
        | |   | |  
        |m|   |m|  
 __________
< eyes.cow >
 ----------
    \
     \
                                   .::!!!!!!!:.
  .!!!!!:.                        .:!!!!!!!!!!!!
  ~~~~!!!!!!.                 .:!!!!!!!!!UWWW$$$
      :$$NWX!!:           .:!!!!!!XUWW$$$$$$$$$P
      $$$$$##WX!:      .<!!!!UW$$$$"  $$$$$$$$#
      $$$$$  $$$UX   :!!UW$$$$$$$$$   4$$$$$*
      ^$$$B  $$$$\     $$$$$$$$$$$$   d$$R"
        "*$bd$$$$      '*$$$$$$$$$$$o+#"
             """"          """""""
 ___________________
< flaming-sheep.cow >
 -------------------
  \            .    .     .
   \      .  . .     `  ,
    \    .; .  : .' :  :  : .
     \   i..`: i` i.i.,i  i .
      \   `,--.|i |i|ii|ii|i:
           UooU\.'@@@@@@`.||'
           \__/(@@@@@@@@@@)'  
                (@@@@@@@@)
                `YY~~~~YY'
                 ||    ||
 __________________
< ghostbusters.cow >
 ------------------
          \
           \
            \          __---__
                    _-       /--______
               __--( /     \ )XXXXXXXXXXX\v.
             .-XXX(   O   O  )XXXXXXXXXXXXXXX-
            /XXX(       U     )        XXXXXXX\
          /XXXXX(              )--_  XXXXXXXXXXX\
         /XXXXX/ (      O     )   XXXXXX   \XXXXX\
         XXXXX/   /            XXXXXX   \__ \XXXXX
         XXXXXX__/          XXXXXX         \__---->
 ---___  XXX__/          XXXXXX      \__         /
   \-  --__/   ___/\  XXXXXX            /  ___--/=
    \-\    ___/    XXXXXX              '--- XXXXXX
       \-\/XXX\ XXXXXX                      /XXXXX
         \XXXXXXXXX   \                    /XXXXX/
          \XXXXXX      >                 _/XXXXX/
            \XXXXX--__/              __-- XXXX/
             -XXXXXXXX---------------  XXXXXX-
                \XXXXXXXXXXXXXXXXXXXXXXXXXX/
                  ""VXXXXXXXXXXXXXXXXXXV""
 _________
< gnu.cow >
 ---------
    \               ,-----._
  .  \         .  ,'        `-.__,------._
 //   \      __\\'                        `-.
((    _____-'___))                           |
 `:='/     (alf_/                            |
 `.=|      |='                               |
    |)   O |                                  \
    |      |                               /\  \
    |     /                          .    /  \  \
    |    .-..__            ___   .--' \  |\   \  |
   |o o  |     ``--.___.  /   `-'      \  \\   \ |
    `--''        '  .' / /             |  | |   | \
                 |  | / /              |  | |   mmm
                 |  ||  |              | /| |
                 ( .' \ \              || | |
                 | |   \ \            // / /
                 | |    \ \          || |_|
                /  |    |_/         /_|
               /__/
 _____________
< head-in.cow >
 -------------
    \
     \
    ^__^         /
    (oo)\_______/  _________
    (__)\       )=(  ____|_ \_____
        ||----w |  \ \     \_____ |
        ||     ||   ||           ||
 ________________
< hellokitty.cow >
 ----------------
  \
   \
      /\_)o<
     |      \
     | O . O|
      \_____/
 __________
< kiss.cow >
 ----------
     \
      \
             ,;;;;;;;,
            ;;;;;;;;;;;,
           ;;;;;'_____;'
           ;;;(/))))|((\
           _;;((((((|))))
          / |_\\\\\\\\\\\\
     .--~(  \ ~))))))))))))
    /     \  `\-(((((((((((\\
    |    | `\   ) |\       /|)
     |    |  `. _/  \_____/ |
      |    , `\~            /
       |    \  \           /
      | `.   `\|          /
      |   ~-   `\        /
       \____~._/~ -_,   (\
        |-----|\   \    ';;
       |      | :;;;'     \
      |  /    |            |
      |       |            |
 ___________
< kitty.cow >
 -----------
     \
      \
       ("`-'  '-/") .___..--' ' "`-._
         ` *_ *  )    `-.   (      ) .`-.__. `)
         (_Y_.) ' ._   )   `._` ;  `` -. .-'
      _.. `--'_..-_/   /--' _ .' ,4
   ( i l ),-''  ( l i),'  ( ( ! .-'
 ___________
< koala.cow >
 -----------
  \
   \
       ___  
     {~._.~}
      ( Y )
     ()~*~()
     (_)-(_)
 __________
< kosh.cow >
 ----------
    \
     \
      \
  ___       _____     ___
 /   \     /    /|   /   \
|     |   /    / |  |     |
|     |  /____/  |  |     |
|     |  |    |  |  |     |
|     |  | {} | /   |     |
|     |  |____|/    |     |
|     |    |==|     |     |
|      \___________/      |
|                         |
|                         |
 ________________
< luke-koala.cow >
 ----------------
  \
   \          .
       ___   //
     {~._.~}//
      ( Y )K/  
     ()~*~()
     (_)-(_)
     Luke
     Skywalker
     koala
 __________________
< mech-and-cow.cow >
 ------------------
                                   ,-----.
                                   |     |
                                ,--|     |-.
                         __,----|  |     | |
                       ,;::     |  `_____' |
                       `._______|    i^i   |
                                `----| |---'| .
                           ,-------._| |== ||//
                           |       |_|P`.  /'/
                           `-------' 'Y Y/'/'
                                     .== /_
   ^__^                             /   /'|  `i
   (oo)_______                   /'   /  |   |
   (__)       )/             /'    /   |   `i
       ||----w |           ___,;`----'.___L_,-'`__
       ||     ||          i_____;----.____i""____
 
 __________
< meow.cow >
 ----------
  \
   \ ,   _ ___.--'''`--''//-,-_--_.
      \`"' ` || \\ \ \\/ / // / ,-\\`,_
     /'`  \ \ || Y  | \|/ / // / - |__ `-,
    /@"\  ` \ `\ |  | ||/ // | \/  \  `-._`-,_.,
   /  _.-. `.-\,___/\ _/|_/_\_\/|_/ |     `-._._)
   `-'``/  /  |  // \__/\__  /  \__/ \
        `-'  /-\/  | -|   \__ \   |-' |
          __/\ / _/ \/ __,-'   ) ,' _|'
         (((__/(((_.' ((___..-'((__,'
 __________
< milk.cow >
 ----------
 \     ____________
  \    |__________|
      /           /\
     /           /  \
    /___________/___/|
    |          |     |
    |  ==\ /== |     |
    |   O   O  | \ \ |
    |     <    |  \ \|
   /|          |   \ \
  / |  \_____/ |   / /
 / /|          |  / /|
/||\|          | /||\/
    -------------|
        | |    | |
       <__/    \__>
 _____________
< moofasa.cow >
 -------------
       \    ____
        \  /    \
          | ^__^ |
          | (oo) |______
          | (__) |      )\/\
           \____/|----w |
                ||     ||
 
                 Moofasa
 ___________
< moose.cow >
 -----------
  \
   \   \_\_    _/_/
    \      \__/
           (oo)\_______
           (__)\       )\/\
               ||----w |
               ||     ||
 _______________
< mutilated.cow >
 ---------------
       \   \_______
 v__v   \  \   O   )
 (oo)      ||----w |
 (__)      ||     ||  \/\
 
 __________________
< pony-smaller.cow >
 ------------------
     \      _^^
      \   _- oo\
          \----- \______
                \       )\
                ||-----|| \
                ||     ||
 __________
< pony.cow >
 ----------
       \          /\/\
        \         \/\/
         \        /   -\
          \     /  oo   -\
           \  /           \
             |    ---\    -\
             \--/     \     \
                       |      -\
                        \       -\         -------------\    /-\
                         \        \-------/              ---/    \
                          \                                  |\   \
                           |                                 / |  |
                           \                                |  \  |
                            |                              /    \ |
                            |                             /     \ |
                             \                             \     \|
                              -              /--------\    |      o
                               \+   +---------          \   |
                                |   |                   |   \
                                |   |                    \   |
                                |   |                    |   \
                                |   |                     \   |
                                 \  |                     |   |
                                 |  |                      \  \
                                 |  |                      |   |
                                 +--+                       ---+
 _________
< ren.cow >
 ---------
   \
    \
    ____  
   /# /_\_
  |  |/o\o\
  |  \\_/_/
 / |_   |  
|  ||\_ ~|
|  ||| \/  
|  |||_
 \//  |
  ||  |
  ||_  \
  \_|  o|  
  /\___/
 /  ||||__
    (___)_)
 ___________
< sheep.cow >
 -----------
  \
   \
       __
      UooU\.'@@@@@@`.
      \__/(@@@@@@@@@@)
           (@@@@@@@@)
           `YY~~~~YY'
            ||    ||
 ______________
< skeleton.cow >
 --------------
          \      (__)
           \     /oo|  
            \   (_"_)*+++++++++*
                   //I#\\\\\\\\I\
                   I[I|I|||||I I `
                   I`I'///'' I I
                   I I       I I
                   ~ ~       ~ ~
                     Scowleton
 _____________
< snowman.cow >
 -------------
   \
 ___###
   /oo\ |||
   \  / \|/
   /""\  I
()|    |(I)
   \  /  I
  /""""\ I
 |      |I
 |      |I
  \____/ I
 _____________________
< sodomized-sheep.cow >
 ---------------------
  \                 __
   \               (oo)
    \              (  )
     \             /--\
       __         / \  \
      UooU\.'@@@@@@`.\  )
      \__/(@@@@@@@@@@) /
           (@@@@@@@@)((
           `YY~~~~YY' \\
            ||    ||   >>
 _________________
< stegosaurus.cow >
 -----------------
\                             .       .
 \                           / `.   .' "
  \                  .---.  <    > <    >  .---.
   \                 |    \  \ - ~ ~ - /  /    |
         _____          ..-~             ~-..-~
        |     |   \~~~\.'                    `./~~~/
       ---------   \__/                        \__/
      .'  O    \     /               /       \  "
     (_____,    `._.'               |         }  \/~~~/
      `----.          /       }     |        /    \__/
            `-.      |       /      |       /      `. ,~~|
                ~-.__|      /_ - ~ ^|      /- _      `..-'
                     |     /        |     /     ~-.     `-. _  _  _
                     |_____|        |_____|         ~ - . _ _ _ _ _>
 ____________
< stimpy.cow >
 ------------
  \     .    _  .
   \    |\_|/__/|
       / / \/ \  \  
      /__|O||O|__ \
     |/_ \_/\_/ _\ |  
     | | (____) | ||  
     \/\___/\__/  //
     (_/         ||
      |          ||
      |          ||\
       \        //_/  
        \______//
       __ || __||
      (____(____)
 __________
< suse.cow >
 ----------
  \
   \____
  /@    ~-.
  \/ __ .- |
   // //  @
 ________________
< three-eyes.cow >
 ----------------
        \  ^___^
         \ (ooo)\_______
           (___)\       )\/\
                ||----w |
                ||     ||
 ____________
< turkey.cow >
 ------------
  \                                  ,+*^^*+___+++_
   \                           ,*^^^^              )
    \                       _+*                     ^**+_
     \                    +^       _ _++*+_+++_,         )
              _+^^*+_    (     ,+*^ ^          \+_        )
             {       )  (    ,(    ,_+--+--,      ^)      ^\
            { (@)    } f   ,(  ,+-^ __*_*_  ^^\_   ^\       )
           {:;-/    (_+*-+^^^^^+*+*<_ _++_)_    )    )      /
          ( /  (    (        ,___    ^*+_+* )   <    <      \
           U _/     )    *--<  ) ^\-----++__)   )    )       )
            (      )  _(^)^^))  )  )\^^^^^))^*+/    /       /
          (      /  (_))_^)) )  )  ))^^^^^))^^^)__/     +^^
         (     ,/    (^))^))  )  ) ))^^^^^^^))^^)       _)
          *+__+*       (_))^)  ) ) ))^^^^^^))^^^^^)____*^
          \             \_)^)_)) ))^^^^^^^^^^))^^^^)
           (_             ^\__^^^^^^^^^^^^))^^^^^^^)
             ^\___            ^\__^^^^^^))^^^^^^^^)\\
                  ^^^^^\uuu/^^\uuu/^^^^\^\^\^\^\^\^\^\
                     ___) >____) >___   ^\_\_\_\_\_\_\)
                    ^^^//\\_^^//\\_^       ^(\_\_\_\)
                      ^^^ ^^ ^^^ ^
 ____________
< turtle.cow >
 ------------
    \                                  ___-------___
     \                             _-~~             ~~-_
      \                         _-~                    /~-_
             /^\__/^\         /~  \                   /    \
           /|  O|| O|        /      \_______________/        \
          | |___||__|      /       /                \          \
          |          \    /      /                    \          \
          |   (_______) /______/                        \_________ \
          |         / /         \                      /            \
           \         \^\\         \                  /               \     /
             \         ||           \______________/      _-_       //\__//
               \       ||------_-~~-_ ------------- \ --/~   ~\    || __/
                 ~-----||====/~     |==================|       |/~~~~~
                  (_(__/  ./     /                    \_\      \.
                         (_(___/                         \_____)_)
 _________
< tux.cow >
 ---------
   \
    \
        .--.
       |o_o |
       |:_/ |
      //   \ \
     (|     | )
    /'\_   _/`\
    \___)=(___/
 
 _____________________
< unipony-smaller.cow >
 ---------------------
   \        \
    \        \
     \       _\^
      \    _- oo\
           \---- \______
                 \       )\
                ||-----||  \
                ||     ||
 _____________
< unipony.cow >
 -------------
   \             \
    \             \_
     \             \\
      \             \\/\
       \            _\\/
        \         /   -\
         \      /  oo   -\
          \   /           \
             |    ---\    -\
             \--/     \     \
                       |      -\
                        \       -\         -------------\    /-\
                         \        \-------/              ---/    \
                          \                                  |\   \
                           |                                 / |  |
                           \                                |  \  |
                            |                              /    \ |
                            |                             /     \ |
                             \                             \     \|
                              -              /--------\    |      o
                               \+   +---------          \   |
                                |   |                   |   \
                                |   |                    \   |
                                |   |                    |   \
                                |   |                     \   |
                                 \  |                     |   |
                                 |  |                      \  \
                                 |  |                      |   |
                                 +--+                       ---+
 _________________
< vader-koala.cow >
 -----------------
   \
    \        .
     .---.  //
    Y|o o|Y//
   /_(i=i)K/
   ~()~*~()~  
    (_)-(_)
 
     Darth
     Vader
     koala
 ___________
< vader.cow >
 -----------
        \    ,-^-.
         \   !oYo!
          \ /./=\.\______
               ##        )\/\
                ||-----w||
                ||      ||
 
               Cowth Vader
 _________
< www.cow >
 ---------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||--WWW |
                ||     ||

Homepage が webarchive だ!

% apt show cowsay
Package: cowsay
Version: 3.03+dfsg1-12
Installed-Size: 96.3 kB
Maintainer: Tony Maillefaud <maltouzes@gmail.com>
Depends: perl
Suggests: filters
Homepage: https://web.archive.org/web/20120527202447/http://www.nog.net/~tony/warez/cowsay.shtml
Tag: game::toys, implemented-in::perl, interface::commandline, role::program,
 use::entertaining, works-with::text
Section: games
Priority: optional
Download-Size: 20.1 kB
APT-Manual-Installed: yes
APT-Sources: http://ftp.jp.debian.org/debian/ stretch/main amd64 Packages
Description: configurable talking cow
 Cowsay (or cowthink) will turn text into happy ASCII cows, with
 speech (or thought) balloons. If you don't like cows, ASCII art is
 available to replace it with some other creatures (Tux, the BSD
 daemon, dragons, and a plethora of animals, from a turkey to
 an elephant in a snake).

追記)
xcowsay も存在するのですね.

20150910_07:09:15-23317

cowsay の COW をランダムに | matoken's meme

Zsh の bindkey に嵌まる

20150910_02:09:18-8531
新しい kernel が降りてきたので再起動したのですが,Ctrl + a の行頭移動や,Ctrl + e の行末移動が使えず ^A^E と表示されるようになってしまいました.Ctrl + U など利用できるものもある.環境は以下のような感じです.

  • OS: Debian testing stretch amd64
  • Shell: zsh 5.0.8
  • byobu backend: screen
  • GNU Screen 4.03.01

GNU Screen を抜けると問題はありません.
最近 GNU Screen のアップデートがあった気がしたので,GNU Screen のせいかな?と思い以前野良ビルドした GNU Screen や Tmux で起動してみましたがこちらでも同じ現象が置きました.
% screen bash の様にして bash を起動すると問題ありません.
GNU Screen 起動後でも bindkey で以下のように設定すると動作します.

% bindkey "^A" beginning-of-line
% bindkey "^E" end-of-line

bindkey のリストを確認すると GNU Screen 起動前 120行,GNU Screen 起動後では 34行と大分少なくなってしまっています.

% echo $TERM
xterm
% bindkey -L | wc -l
120
% echo $TERM
screen-bce
% bindkey -L | wc -l
34

とりあえず GNU Screen 起動前に ~/.zshrcprecmd() の中に bindkey -L の結果を vim で :r!bindkey -L | sed -e 's/^/ /' な感じで貼ってひとまず反映させました.

case "${TERM}" in
screen*|ansi*)
        preexec()
        {
                echo -ne "\ek${1%% 2%% *}\e\\"
        }
        precmd()
        {
                echo -ne "\ek$(basename $SHELL) :::: waiting your command ... > (:3[___]\e\\"
                bindkey -R "^A"-"^C" self-insert
                bindkey "^D" list-choices
                  :
                  :
                  :
 
                  :
                bindkey -R "\M-^@"-"\M-^?" self-insert
        }
        ;;
esac

切り分けのために新しくユーザを作って chsh -s /bin/zsh してまっさらな状態から試すと ~/.zshrc を cp すると現象が起こりました.更に切り分けていくと .zshrc の中の export EDITOR=vim でした.
% EDITOR=vim screen で発症する.% EDITOR=emacs screen はok…….その他 vi NG / jed, nano は ok と vi/vim を指定すると起きるよう.

検索するとこんなページが見つかりました.

環境変数 EDITOR が vi/vim だと Zsh のキーバインドが vim モードになるということのようです.Esc -> 0 で行頭移動,Esc -> Shift+a で行末に.確かに vim モードのようです.ということで ~/.zshrc で emacs モードに設定することで解決しました.(上の方で設定した bindkey の設定は消しました)

export EDITOR=vim
bindkey -e

腑に落ちないのは GNU Screen / Tmux 起動時には起こるけど普通の Zsh 起動時は起きないところ…….

awesome wm のミュートスクリプト改善(ヘッドホン&beep 対応等)

の続きです.このシリーズは興味ある人ほとんど居ない気もしてますが…….

ボリュームコントロール用の script を書いていい感じでボリュームコントロールが使えている気がしていたのですが,いくつか不具合が見つかったので改良しました.

問題1.ヘッドホン利用時にアンミュートされない

ミュート時に Master をミュートして,同様にアンミュート時に Master をアンミュートするのですが,ヘッドホン利用時にはヘッドホンがミュートされたままになってしまいます.

amixer -c 0 get Headphone とかして確認すると,off のままです.

% amixer -c 0 get Headphone 
Simple mixer control 'Headphone',0
  Capabilities: pvolume pswitch
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 74
  Mono:
  Front Left: Playback 74 [100%] [0.00dB] [off]
  Front Right: Playback 74 [100%] [0.00dB] [off]

Headphone に対して unmute すると音が出るようになりました.

ということでアンミュート時に Master だけでなく Headphone / Speaker もアンミュートするようにしました.Headphone / Speaker は両方 on にしても排他利用になるようで両方 on にしても問題ないようです.

  • amixer -q -c 0 set Master unmute
  • amixer -q -c 0 set Master unmute
    amixer -q -c 0 set Speaker unmute
    amixer -q -c 0 set Headphone unmute

これでヘッドホンやスピーカーを切り替えてもちゃんと切り替わるようになりました.

問題2.BEEP がミュートされない

Master や Beep を mute しても beep音が出てしまいます.amixer でボリュームを 0% にしても音が出てしまいます.

% amixer -c 0 get Beep
Simple mixer control 'Beep',0
  Capabilities: pvolume pvolume-joined pswitch pswitch-joined
  Playback channels: Mono
  Limits: Playback 0 - 7
  Mono: Playback 4 [57%] [-12.00dB] [off]

ALSA ではなく基本の? xset で有効,無効にしたら効いたのでこれを設定しました.

  • beep ミュート
    xset -b
  • beep アンミュート
    xset b

問題3.音量ボタンを押した時のメッセージでミュート・アンミュート状態がわからない

ボリュームUp / Down ボタンを押した時のメッセージがミュート状態にかかわらず同じものを表示していたので音量が小さくて聞こえないのかミュート状態だから音が出ていないのかわかりませんでした.

ミュート状態によりアイコンを変更するようにしました.ついでに Up/Down の矢印も表示するようにしました.

  • これまでは1パターン
    20150903_03:09:24-10606

  • ミュート状態でアイコンの変更&矢印を表示するようにした
    20150909_21:09:58-1293720150909_21:09:41-13553
    20150909_21:09:37-1439820150909_21:09:50-14607

出来上がった script

ということでそれぞれを反映してこんな感じになりました.

#!/bin/bash 
 
MUTE=`amixer -c 0 get Master|tail -1|cut -d '[' -f 4|sed s/\]//`
 
if [ $MUTE = "on" ] ; then
  ICON="/usr/share/icons/ContrastHigh/scalable/status/audio-volume-medium.svg"
else
  ICON="/usr/share/icons/ContrastHigh/scalable/status/audio-volume-muted.svg"
fi
 
case "$1" in
  "XF86AudioMute" ) 
    if [ $MUTE = "on" ] ; then
      amixer -q -c 0 set Master mute
      xset -b
      echo -e "🔊☓\nmute!"
      notify-send -u low -t 500 -i '/usr/share/icons/ContrastHigh/scalable/status/audio-volume-muted.svg' mute ""
    else
      amixer -q -c 0 set Master unmute
      amixer -q -c 0 set Speaker unmute
      amixer -q -c 0 set Headphone unmute
      xset b
      echo -e "🔊\nunmute!"
      amixer -c 0 get Master | tail -1 | cut -d '[' -f 2 | sed s/\]// | xargs notify-send -u low -t 500 -i '/usr/share/icons/ContrastHigh/scalable/status/audio-volume-high.svg' numute
    fi
  ;;
  "XF86AudioRaiseVolume" ) 
    amixer -c 0 set Master 2dB+ | tail -1 | cut -d '[' -f 2 | sed s/\]// | xargs notify-send -u low -t 500 -i $ICON "Vol ⤴"
  ;;
  "XF86AudioLowerVolume" ) 
    amixer -c 0 set Master 2dB- | tail -1 | cut -d '[' -f 2 | sed s/\]// | xargs notify-send -u low -t 500 -i $ICON "Vol ⤵"
  ;;
esac

今のところ満足 :-)

awesome wm のミュートスクリプト改善(ヘッドホン&beep 対応等)

の続きです.このシリーズは興味ある人ほとんど居ない気もしてますが…….

ボリュームコントロール用の script を書いていい感じでボリュームコントロールが使えている気がしていたのですが,いくつか不具合が見つかったので改良しました.

問題1.ヘッドホン利用時にアンミュートされない

ミュート時に Master をミュートして,同様にアンミュート時に Master をアンミュートするのですが,ヘッドホン利用時にはヘッドホンがミュートされたままになってしまいます.

amixer -c 0 get Headphone とかして確認すると,off のままです.

% amixer -c 0 get Headphone 
Simple mixer control 'Headphone',0
  Capabilities: pvolume pswitch
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 74
  Mono:
  Front Left: Playback 74 [100%] [0.00dB] [off]
  Front Right: Playback 74 [100%] [0.00dB] [off]

Headphone に対して unmute すると音が出るようになりました.

ということでアンミュート時に Master だけでなく Headphone / Speaker もアンミュートするようにしました.Headphone / Speaker は両方 on にしても排他利用になるようで両方 on にしても問題ないようです.

  • amixer -q -c 0 set Master unmute
  • amixer -q -c 0 set Master unmute
    amixer -q -c 0 set Speaker unmute
    amixer -q -c 0 set Headphone unmute

これでヘッドホンやスピーカーを切り替えてもちゃんと切り替わるようになりました.

問題2.BEEP がミュートされない

Master や Beep を mute しても beep音が出てしまいます.amixer でボリュームを 0% にしても音が出てしまいます.

% amixer -c 0 get Beep
Simple mixer control 'Beep',0
  Capabilities: pvolume pvolume-joined pswitch pswitch-joined
  Playback channels: Mono
  Limits: Playback 0 - 7
  Mono: Playback 4 [57%] [-12.00dB] [off]

ALSA ではなく基本の? xset で有効,無効にしたら効いたのでこれを設定しました.

  • beep ミュート
    xset -b
  • beep アンミュート
    xset b

問題3.音量ボタンを押した時のメッセージでミュート・アンミュート状態がわからない

ボリュームUp / Down ボタンを押した時のメッセージがミュート状態にかかわらず同じものを表示していたので音量が小さくて聞こえないのかミュート状態だから音が出ていないのかわかりませんでした.

ミュート状態によりアイコンを変更するようにしました.ついでに Up/Down の矢印も表示するようにしました.

  • これまでは1パターン
    20150903_03:09:24-10606

  • ミュート状態でアイコンの変更&矢印を表示するようにした
    20150909_21:09:58-1293720150909_21:09:41-13553
    20150909_21:09:37-1439820150909_21:09:50-14607

出来上がった script

ということでそれぞれを反映してこんな感じになりました.

#!/bin/bash 
 
MUTE=`amixer -c 0 get Master|tail -1|cut -d '[' -f 4|sed s/\]//`
 
if [ $MUTE = "on" ] ; then
  ICON="/usr/share/icons/ContrastHigh/scalable/status/audio-volume-medium.svg"
else
  ICON="/usr/share/icons/ContrastHigh/scalable/status/audio-volume-muted.svg"
fi
 
case "$1" in
  "XF86AudioMute" ) 
    if [ $MUTE = "on" ] ; then
      amixer -q -c 0 set Master mute
      xset -b
      echo -e "🔊☓\nmute!"
      notify-send -u low -t 500 -i '/usr/share/icons/ContrastHigh/scalable/status/audio-volume-muted.svg' mute ""
    else
      amixer -q -c 0 set Master unmute
      amixer -q -c 0 set Speaker unmute
      amixer -q -c 0 set Headphone unmute
      xset b
      echo -e "🔊\nunmute!"
      amixer -c 0 get Master | tail -1 | cut -d '[' -f 2 | sed s/\]// | xargs notify-send -u low -t 500 -i '/usr/share/icons/ContrastHigh/scalable/status/audio-volume-high.svg' numute
    fi
  ;;
  "XF86AudioRaiseVolume" ) 
    amixer -c 0 set Master 2dB+ | tail -1 | cut -d '[' -f 2 | sed s/\]// | xargs notify-send -u low -t 500 -i $ICON "Vol ⤴"
  ;;
  "XF86AudioLowerVolume" ) 
    amixer -c 0 set Master 2dB- | tail -1 | cut -d '[' -f 2 | sed s/\]// | xargs notify-send -u low -t 500 -i $ICON "Vol ⤵"
  ;;
esac

今のところ満足 :-)