2017年6月20日火曜日

A2DP Bluetooth headphone のスムースなシンク切り替え

新規にターミナル(端末)を開きます。ubuntu系は以下を同時押し。CTRL+ALT+T

#スムースなシンク切り替え器の使い方

~/bin に、以下のテキストをスクリプトとして保存。1行だけオレンジを書き換える。

多数BTヘッドフォンを保有している場合は、ヘッドフォン毎にスクリプトを作ると管理が楽ちん。たとえば、 ~/bin/sonyMDRxxx とか、ELECOMxxx とか。MACを書き換えるのを忘れないでください。


利用タイミング

BTヘッドフォンの電源をいれてだいたい10秒後ぐらい。2秒ぐらいでもいいけれど。


使い方:
  • ターミナルで、スクリプト名を叩く。
  • ファイルマネージャーでクリックする。
  • 右クリックメニューに割り当てる。(おまけ実例後半)

お好きなように。

備考:なぜ必要か
GUIのサウンドでは表示はデジタルのままでも、実際はBTに切り替わっているというバグなんかが当方の環境では起きるので、 マウス操作するよりコマンドで確実に! という方針なのです。見た目ではわからない。Cinnamonです。最新版でも同様。Blueberryっていまいちなのかな?!

特に困ってない人は何もしなくてもいいのです。

#bt_smooth_sink(do name as you like it.)

#! /bin/bash
#@ A2DP 接続をほぼ確実にする。SINK切り替え限定の簡易版。Zish
# 接続+SINK切り替え版からのサブセットで抜き出しました。
#2012-2017
#
#書き換え   ↓ your own a2dp headphone, you must rewrite below line !!
A2DPMAC=1A:A5:C6:D7:F2:CC
#A2DPMAC=2nd
#
#
#
#
BTSINKS=${A2DPMAC//:/_}

#接続そのものが難儀な場合は次を有効にしたほうがよい。

    bt-device --connect $A2DPMAC




#echo ②デフォルトシンクを $A2DPMAC Bluetooth に
    pactl list short sinks | grep $BTSINKS | perl -pe 's/^(\d.*?)\tbluez_.*$/pacmd set-default-sink $1/' | sh
#echo ③ BluetoothプロファイルをA2DPに切り替える
    #pactl set-card-profile bluez_card.$BTSINKS off
    pactl set-card-profile bluez_card.$BTSINKS a2dp_sink
    pactl set-sink-volume  bluez_sink.$BTSINKS 115%
#echo ④ pactl set-default-sink bluez_sink.$BTSINKS 前後関係チェック
    pactl set-default-sink bluez_sink.$BTSINKS



#echo check bluez_sink="$BTSINKS"
if  pactl list short sinks | grep -E 'bluez_sink' ; then
#    echo ⦿ ブルートゥース A2DP + Hi-Fi 接続済み ⦿
#    pactl list short sinks | grep bluez_sink | grep -P --color=auto '(hdmi)|(analog)|(iec\d*)|(bluez_sink)|\s(\d\d\d\d.*?)(?=Hz)|surround.*?\d\s|RUNNING|\s\d(?=ch)|(?!=s)(\d\d)(?=le)'
    #無論、BTSINK限定なので無効であればA2DPから音出しできない。A2DP接続前提。定位チェックではないです
    echo "女性の声で「左、右、真ん中」. A2DP(ヘッドフォン)から聞こえればたぶん成功。"
        paplay -d bluez_sink.$BTSINKS /usr/share/sounds/alsa/Front_Left.wav
        paplay -d bluez_sink.$BTSINKS /usr/share/sounds/alsa/Front_Right.wav
        paplay -d bluez_sink.$BTSINKS /usr/share/sounds/alsa/Front_Center.wav
else
    echo "bluez_sink $BTSINKS ' がありません。BT/A2DP $BTSINKS は接続されていません。"
fi
echo EXIT


exit
Zish
A2DP 接続を確実にする。SINK切り替え簡易版(サブセット)。


#おまけ::Cinnamon/nemoアクションの右クリックメニューの実例:サブセットじゃないほう。

[Nemo Action]
Name=サウンド出力切替 Bluetooth SONY
Comment=sinks SONY


Exec=bash -c "sinks sony ; cinnamon-settings sound ;"
#Exec=bash -c "sonymdr ;"
Icon-Name=deadbeef
Selection=none
Extensions=none
EscapeSpaces=true
Quote=double
Active=true

2017年6月12日月曜日

Zsh :: Zsh_ hitory convert to UTF-8 Zshで最も嫌いなポイントが解決しました。


自分にとってのZshの最大の弱点は、ヒストリーファイルが取り扱いにくいことでした。アスキー以外の文字列がアレなので。日本語のファイル名がアレでコレでソレ。

以下で、それが解決できます。
使い方:新規にターミナル(端末)を開きます。ubuntu系は以下を同時押し。CTRL+ALT+T
#
zshhist.py を ~/bin にコピー、実行属性も。
#ヘルプ
zshhist.py を ~/bin にコピーします。実行属性もつけるといいです。 
zshhist.py -h
#引数は2つ シンプル

     export         export zsh history file to UTF-8 text.
     import         transform UTF-8 text to zsh history format.

出力結果を > でファイル(エディタで編集)にするなり、パイプでコマンド処理するなりするといいと思います。

エディターより、編集したいパターンをPerl/awkなどのテキスト処理に強いコマンドで処理したほうが再利用もあるだろうし合理的かとも思います。

#例示1)エクスポートする。utf-8形式で日本語の文字化けのない扱いやすいファイルにする

zshhist.py  export

ががーと .zsh_history の"変な文字"になった日本語が綺麗になります。

#UTF-8にして、エディターで開いて(必要なら編集保存)
この作業している最中は、bashに切り替えておいたほうがいいかも。履歴が変わっていく。

例示1) utf-8形式で日本語の文字化けのない扱いやすいファイルにする。


zshhist.py export > /tmp/zsh_utf-8.txt && atom /tmp/zsh_utf-8.txt

次いで、import してみればいいかと。
オリジナルヒストリーファイルは事前保存しておいてください。


例示2) export した日本語ファイル名などの入ったファイルをエディターなりperl なりで編集したとする。編集後ファイルを書き戻してヒストリーとして使う。インポートする。


例示2) export した日本語ファイル名などの入ったファイルをエディターなりperl なりで編集したとする。例示1のコマンド形式。

編集後ファイル: zsh_utf-8_20170617_1835.txt

zsh形式にする。
zshhist.py import < zsh_utf-8_20170617_1835.txt > .zsh_history.new (Z)

このNewを既存の .zsh_history をバックアップの上、上書きする。

 

例示3) bash からの移行、あるいは、bash と zsh のヒストリーをマージする。bashからzshへの移行にも使えるし、両方使っていてたまにマージしたい場合も有能。




bash to zsh のハードルはZshのUTF-8問題だけなので、それさえクリアできれば自力であとの処理はできる人は大半だと思いますが、git に限らずbash to zsh は多数ありますが、以下に示すツールがいいかと。



流れはこれだけ。
Bash history to Zsh history  = zsh 形式のbash_history (B)と
上の(Z)をマージすればいいです。マージしたものをzsh形式にします。しました。

手順
1) utf-8の(B)+(Z)を作る (BZが完成)
2) (BZ)を.zsh ヒストリ形式にコンバート

zshhist.py import < (BZ).txt > .zsh_history (BZ_hitory)

3) この(BZ_hitory=いつものzshヒストリーです。日本語バケバケです。それがOK。読めたらおかしいのです) を本番の ~/.zsh_history に上書きして完成。


バックアップは事前にとってください。


生ソース:gist(github)のリンクが自動で貼られるはずです。この埋め込みしたのはじめてなので。





このツールを使えば、bash のヒストリーを一括編集加工して、Zshにもっていったりが楽ですね。英語だけに限ればZsh-Bash間のツールは多く見つかりました。ここのところ(日本語などの部分)が難しかったんです。はい。

Emacsな方は「Emacs で Zsh の ヒストリファイルを閲覧・編集する」が参考になると思います。





2017年6月6日火曜日

perl モジュールの導入。ubuntu mint のインストール候補

どうも壊れかけなのか、Synaptic/パッケージマネジャーの反応が悪いので検索がうまくいきません。 あるはずのものが出てこない。

そこで、cpanコマンドでなんかうまくいかず、ソースをもってきて、makeしたら最後にコケる。
cpanコマンドでは時々いれているので不思議です。
いらっとしたので、リストを取得していれてみました。 Term::UI; なんですけどね。
なんでだろう。cpanで説明を読んで試してみたくなったら、aptでリストにないか調べて、コマンドで導入するというのがめんどうがなくていいです。


手順は次の通りです。慣れるとカンタンなはずです。
  1. いれたいモジュールを思いつく。誰かの頁の紹介や、CPAN、perlmonkなどで。
  2. apt list でインストール候補に存在しないか調べてみる。
    著名PerlModuleは全部あると思っていい(と思います)。
  3. あれば、apt install で導入する。

    なければcpanコマンドかソース落としてきてmake。


debian/ubuntuのメンテナーが選んでいる候補なら安心して使える気がしますので、あまり使われてなさそうなのには私のような素人は手を出さないほうがいいのかもしれません。ただ、場合によってはパッケージングのアップデートが年単位で遅れることもありますので、その時は自力ですね。

新規にターミナル(端末)を開きます。ubuntu系は以下を同時押し。CTRL+ALT+T
#
#試しに打ってみる。  55318行でした。
apt list
#perl モジュールのリストを調べる。
apt list | grep -oP '^lib..*?-..*?-perl'

3228(パッケージ)モジュール。このマッチパターンで提供されているものとします。違うことはないでしょうが。
#数え方
apt list | grep -oP '^lib..*?-..*?-perl' | wc
#utf8-all という名前を知っているのでそれをいれます。
#インストールコマンド文字列を生成する。 納得したらぺったんして実行。
apt list | grep -oP '^lib..*?-..*?-perl' | grep utf8-all | perl -pe 's|^|sudo apt install |'

#インストールまで実行する。 (sudo に付き注意)
apt list | grep -oP '^lib..*?-..*?-perl' | grep utf8-all | perl -pe 's|^|sudo apt install |' sh

sudo apt install libutf8-all-perl

ちなみに上で書いているTerm::UIはこれです。
sudo apt install libterm-ui-perl
#

bash history を使いやすく。ctrl-r の改善ツール



ちょっと試せていませんが、こういうツールがあるようですよ。
頁をみるだけならただなので、どうぞ。

New utility to overclock Radeons for Linux

こういうツールを見つけました。GPUオーバークロックのためのツールです。

https://github.com/matszpk/amdcovc

make は通りましたが、当方ではエラーで動かない様子。

#AMDから入手するファイル展開(AMD ADL SDK)と以下の開発ファイルがmakeのために当方では必要でした。
 sudo apt install opencl-headers
 sudo apt install libpci-dev
#makefileも修正が必要です。
#ADLSDKDIR = /home/mat/docs/src/ADL_SDK9
ADLSDKDIR = /home/ehhen/Downloads/git/amdcovc/ADL_SDK_V10.2
#SDKは、V10.2も SDK9も通りました。

2017年6月5日月曜日

Perl 「Wide character in print」 エラーに即時対応する。

理由/原因には興味はないので必要ならググってもらうとして、

Ubuntuなどで ja_jp.UTF8 など(SHIFT_JISじゃあるまいに)を使っているのに発生して、Cpanモジュールなどが原因の場合、自分のスクリプトを書き換えずに、モジュールの方を書き換えています。

エラーでは行数が表示されますが、それは無視。当該hoge.pmに


#以下を追記
use utf8::all;



#libutf8-all-perl のインストールが必要です。
#sudo apt install libutf8-all-perl


自分の場合はこれでうまく対処できなかったことはありません。とても重宝しています。
別言すれば、エンコードだのデコードだのはばからしいので考えたくもないのでした。
とても便利なのでもっと知ってほしいです。Printするだけならエラーを無視という手も通じる場合がありますが、日本語を含む名前のファイルを自動生成するスクリプトなどの場合はとんでもないひどい文字化けだったりしますから、この呪文一行で解決するなら安いものです。


以前はご多分にもれず私もエンコードだの、デコードだのUTF8フラグを除去するだの、ばからしいコードを書いていました。こんな非生産的な行為をみんなやっているんだろうか? とふと疑問になって、CPANでUTF-8という文字列で検索できるモジュールを全部(ほんとうに全部)試してたどり着きました。

それはそうと、Python3でも小物を作るのですが、Unicode文字が自在に使えて便利ですよね(その意味で最高!!)。Perlでもこのモジュールlibutf8-all-perlを組み込むと変数に日本語が使えます。使っています。

my 章
my 節
my 項

みたいにです。 3年前ぐらいにubuntuのインストール候補になった気がします。