2017年9月20日水曜日

排他的にサウンドデバイスを使う::カンタンな設定の準備

WindowsでいうところのWASAPIみたいなDAC利用方法/ALSA・排他的


ともだちに説明するのがめんどくさいので、こういうスクリプトを書けばいいのかなと思って用意してみました。

WindowsでいうところのWASAPIっぽい(夕立(艦隊これくしょん))Linuxでのサウンド・ソースの使い方といってもいいのがこの設定ではないかと思います。

誤解全開で換言すればサウンド資源独り占めモードですね。WASAPI/ASIOと違いアプリケーションの音量コントロールなどに制限がありません。おおざっぱにですよ。完全排他的じゃないので言葉のアヤです。あくまで、おおざっぱにっぽい。

わりと簡便設定なのでオトクだと決めました。困っている場合は、騙されたとおもって一度どうぞ。


まとめるとUSB-DACなどでノイズ、プチ等が気になる場合は

  1. まず、この排他利用 をしてみる。
  2. それでもだめなら低遅延カーネルを導入する。
  3. それでもだめなら、jackを導入する。

という3段階で考えるといいと思います。その次はドライバが悪いか、デバイスが悪いということであきらめましょう。

カーネルそのものを変えてみたり、ディストロ自体を最新にしてみるなど。というのは、ALSAやPulseの設定は散々やりましたが上で述べた1-2-3を試すのが楽であるというのが私の結論だからです。2年ぐらい無駄にした。笑) CPUが速ければ問題なくなるのかもしれませんね。セレロン並だから。

ついでにいうと効果がまったくなかったのは、アプリの優先度を最優先にしてみるです。これはうまくなかった。CPUパフォーマンス最大固定でも意味はなかった。
このマシンでW10を起動して鳴らしてみると問題ないのでLinuxの中の問題なのでしょうね。私の守備範囲を超えています。


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

#/etc/modprobe.conf USB-Audioを低遅延にする呪文。わりと重要かも。自分には必須!!

$ cat /etc/modprobe.conf
options snd-usb-audio nrpacks=1
デフォルトではない?!と思うのでこの1行だけのファイルを作る。太字大文字にしたのは私の気分です。

sudo gedit /etc/modprobe.conf でペタ、保存。

http://alsa.opensrc.org/Usb-audio#Tuning_USB_devices_for_minimal_latencies
効果的だと思うので必要に応じて試してみてください。だめなら戻せばいいのです。DACに限らずUSBの音楽機器の場合に有効みたいです。

どれを選んだらいいのかわからないとかアプリ毎の選択インターフェイスが違ってめんどくさいという人のために。以下のPerlスクリプトでどうぞ。これでいいかと思います。


#次のコマンドを発行してhwではじまる行のいずれかを適宜選びます。(黄色をそのままコピーしてターミナルで実行します。)
aplay -L | perl -nle 's|^(.*)$|\n$1|g if m/DEV=\d/ ; print' | perl -nle '$/=""; print if /without any/ '

以下のような出力が得られます。眺めても楽しくないので、さくっと青いところに注目しましょう。

hw:CARD=Generic,DEV=0
    HD-Audio Generic, ALC892 Analog
    Direct hardware device without any conversions
hw:CARD=Generic,DEV=1
    HD-Audio Generic, ALC892 Digital
    Direct hardware device without any conversions
hw:CARD=series,DEV=0
    EHP-AHR192 series, USB Audio
    Direct hardware device without any conversions
hw:CARD=HA90USB,DEV=0
    HA90USB, USB Audio
    Direct hardware device without any conversions
hw:CARD=HA90USB,DEV=1
    HA90USB, USB Audio #1
    Direct hardware device without any conversions

コマンド時点、上から順に。
  • 背面ミニジャック
  • S/PDIF 光出力角
  • エレコム EHP-AHR192のandroid用USB-DAC
  • オーディオテクニカHA90USBのUSB-DAC analog
  • オーディオテクニカHA90USBのUSB-DAC#1 S/PDIF 
ハードウェア的にはどれも (192k/24bit)です。HDMI/Display Portのサウンドのみ殺してあります。

作業とデバイスが「USB-DACの設定である」と決まっている場合は次で絞り込めます。
aplay -L | perl -nle 's|^(.*)$|\n$1|g if m/DEV=\d/ ; print' | perl -nle '$/=""; print if /without any/ and /USB Audio/'

これ(端末)を開いたまま、アプリの設定をしてみましょう。

#現在小生が排他的に設定しているアプリ
mpv ちょっとややこしい。
audacious
deadbeef
#アプリ別設定方法 未稿
#mpvの場合 デフォルトはPulse

exclusive
#私は提督ではない。

2017年9月15日金曜日

エレコム ハイレゾDACをLinuxで使う

USB-DACをLinuxで使う、嘘つきパーフェクトマニュアル

嘘つき!! 挿すだけで使えるのだから、パーフェクトも何もあったもんじゃないです。とはいえ、だめなのはありました。これで自分では4つ目のUSB-DACです。

今回導入してみたのは、エレコム http://www.elecom.co.jp/ さんの写真と本体です。ハイレゾDACをDesktopLinuxで使います。もちろんノートPCでもいいでしょう。

1.本体 1100円ぐらい(定価の5%ぐらいで投げ売り中)
2.USB変換アダプター 150-300円ぐらい(PCとこれを接続)が必要。
3.基本スマホ用でandroidならそのまま使います。
4.予算に余裕があれば、ハイレゾ対応ヘッドフォン/イヤホンをゲット
5.(4万キロヘルツなんて聴こえへんのやからどうでもええやん)
6.どうやら相性問題が大量発生しているのかもしれません。それが安価な理由。
7.ちゃんと動けば音質は良い(悪くない)です。ただしバッテリ消費が激しいのでPC用途が美味しいです。バッテリーのヘタっているスマホの人は使わないほうがいいかも。

欠点は、ボリュームがおおざっぱ。やっぱり持ち歩くにはうざったい。家PC用がいいのではないか、と思います。

メモ::

Class2.0 対応の恩恵ですね。そこだけみるとMAC OSでも、Windows10の2017年春以降のCreatersUpdateがあたっていれば動くはずと推定できます。

追記::ふつうにW10で動作しました。パーフェクト。

事前の学習(趣味なのでこの節飛ばしていいです)

新規にターミナル(端末)を開きます。ubuntu系は以下を同時押し。CTRL+ALT+T
#
もともと
cat /proc/asound/modules
では、snd_hda_intel
#サウンドデバイスまったくない状態で
HDMI disable手順を踏んでリブートし、かつUSB DACを電源onすると

cat /proc/asound/modules

1 snd_usb_audio


という具合に、USB DACが自動認識されます。他のデバイスはありません
(ダミー出力状態から、サウンドデバイスが認識される、と)。

USBに挿します。使います。


micro-USBとふつうのUSB変換アダプタ経由でPCのUSB端子に、USB-DACを挿し込む。300円ぐらい。
cat /proc/asound/modules
 0 snd_hda_intel
 1 snd_usb_audio

勝ち!!

#ubuntu/Mintで認識されて音が出ている状態/Linux Mint18.2 Cinnamon
cat /proc/asound/cards
 0 [Generic        ]: HDA-Intel - HD-Audio Generic
                      HD-Audio Generic at 0xfeb00000 irq 16
 1 [series         ]: USB-Audio - EHP-AHR192 series
                      ELECOM CO., LTD. EHP-AHR192
series at usb-0000:05:00.0-1.3, high speed

https://poor-user.blogspot.jp/search?q=sinks
192k/24bit ハイレゾを再生する。 ビットレートが確認できる。Pulseの場合です。期待どおりの出力です。

pactl list short sinks
0    alsa_output.pci-0000_00_14.2.analog-surround-51    module-alsa-card.c    s32le 6ch 192000Hz    SUSPENDED
1    alsa_output.usb-ELECOM_CO.__LTD._EHP-AHR192_series-01.analog-stereo    module-alsa-card.c    s24le 2ch 192000Hz    RUNNING

ここで音が割れていないか、ノイズがはいらないかなどをおおざっぱに確認します。
そこまでいっておおむねパーフェクト(これから本格セッテイング開始::Pulseを使わない)。
#


2017年9月11日月曜日

gnu grep のススメ、Perl互換オプションのススメ::あえて2017年に叫ぶ

gnu grep が使える環境なら、素直にgnu grep を使おう


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

#PCRE(Perl正規表現互換オプション)

grep -P '検索文字列'

エクスペリメンタルな位置づけも終わっていますので安心です。サブセットかと思っていたら、(否定|肯定)(先読み|後読み)も使えますよ。グッドです。

gnu grepが使えない環境では、pcre2grep/pcregrep がありますが、あんまり使いませんね。

おおむね、grepの -Pオプション(大文字です。小文字にしても怒られるだけなのですぐに気が付きます)でだいじょうぶ。

私の場合、ほとんど日本語処理目的なのですが自分の用途では困ったことがないですね。

#Perlのワンライナーの一例

perl -ne "print if /検索文字列/" ファイル

grepの色分け機能などを実装するのはたいへんですから、素直にGNU Grepがよいです。


MACはGNU grepではないらしいので、pcregrep/pcre2grepが良いのではないでしょうか。
私はカジュアルなLinux使いなので、深いことは気にしません。笑) pcre2grepで統一してもいいかもしれません。

方針としては、できるだけ簡素に、学習することなく、空気のように端末を扱うです(努力だけはしたくない)。だから、正規表現はPerl互換の正規表現だけが原則です。プロの方は瞬時に脳みそ切替しながら使うのかもしれませんけれど。

#perl 5 互換の正規表現を利用する grep ユーティリティ pcregrepをいれたい場合。ubuntu/mint

導入する
sudo apt install pcregrep

削除する
sudo apt purge pcregrep
...

きょう現在、当方にはいっているgrep

pcre2grep --version
pcre2grep version 10.21 2016-01-12

pcregrep --version
pcregrep version 8.38 2015-11-23

zpcregrep --version
zgrep (gzip) 1.6
Copyright (C) 2010-2013 Free Software Foundation, Inc.


grep --version
grep (GNU grep) 2.25

Copyright (C) 2016 Free Software Foundation, Inc.



#複数行にわたるgrepの例::Perlのワンライナーのほうが楽だよねといわれそうだけど。

perlのワンライナーのほうが楽だけど、grepでもちょろいので知っていて損はないという例。

こういうファイル。9行。
cat -n delete.txt
     1 会いたい
     2 藍Ⅰ姶
     3 藍とと藍
     4 藍藍
     5 藍藍青
     6 群青
     7 藍藍
     8 藍と
     9 藍マイ。


マッチした範囲に色。色がなければ無能。
$ grep -Pz  '愛.*(\n|.)*終' delete.txt
会いたい
藍Ⅰ姶
藍と愛と藍
藍藍
藍藍青
群青
藍藍
藍と終
藍マイ。

※zオプションで行単位処理でなくなり、 
(\n|.)で改行またはなんかの1文字にマッチさせる。
perlでいえば、セパレータ変えての/smオプションってことですね。


範囲切り出し::オススメなo オプション、有能
$ grep -Pzo  '愛.*(\n|.)*終' delete.txt
愛と藍
藍藍
藍藍青
群青
藍藍
藍と終

含まれている行を表示
$ pcre2grep -M  '愛.*(\n|.)*終' delete.txt 
藍と愛と藍
藍藍
藍藍青
群青
藍藍
藍と終と

$ pcregrep -M  '愛.*(\n|.)*終' delete.txt 
藍と愛と藍
藍藍
藍藍青
群青
藍藍
藍と終と

マニュアルで詳細は確認してください。

pcre2grepの動作をperlでやるとすれば、範囲を抜き出すかんじ。

perl -nle  'print if /愛/ ... /終/' delete.txt


PCRE2grepとPCREgrepの違い


前者が新しい10系列以降になります。後者はメンテされていますが8系列です。ubuntu標準では8系列です。自分がどうやってpcre2grepをいれているのかは思い出せません。コンパイルしたのでしょうね。

PCREプロジェクトはケンブリッジ大学発祥のようです。
Cf. http://www.pcre.org PCRE - Perl Compatible Regular Expressions

2017年9月9日土曜日

tesseract-ocr OCR on Ubuntu/Linux Mint

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

1行または3行でインストール完了です。

tesseract-ocr 最新をいれてみる場合、4系列α版

#gitに追随 安定版ではありません。 ただし訓練辞書などが最新です。
sudo add-apt-repository ppa:alex-p/tesseract-ocr
sudo apt update

#導入してみる。メンテナーバージョンなら、ここから。上の2行は通常スルーしてください。

sudo apt install tesseract-ocr tesseract-ocr-jpn

日本語と英語対応版として導入されます。

tesseract-ocr 使ってみる。

日英混在。オライリー本のスキャンでテスト
tesseract 画像.jpg 333 -l eng+jpn
#表示してみる。わりといいかんじ。
cat 333.txt

当方の印象としては、3.04 よりは4.0がデフォルトでかなり認識が良いです。日本語訓練辞書も新しいです。GUIが必要な場合は、このテッサラクト(テッセラクト)をエンジンにするフロントエンドがふたつはあったような。インストールを除けばMACでも同じことですね。

⚠ライブラリなどファイル配置がことなるためLinuxとMACではそこに注意。

当方ではだいじなものはここにインストールされました。MACは違うと思う(たぶん)。
/usr/share/tesseract-ocr/4.00/tessdata/

2017年9月6日水曜日

VirtualBox for Linux インストール

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


#16.04 /mint 18 の場合
以下のファイルに1行書き足す。
sudo gedit /etc/apt/sources.list

deb http://download.virtualbox.org/virtualbox/debian xenial contrib

bash


wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add - wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -

sudo apt-get update
sudo apt-get upgrade

sudo apt-get install virtualbox-5.1 
 

2017年9月2日土曜日

Python2用ではなく、Python3のIDLEを導入する

ubuntu16.04.*


新規にターミナル(端末)を開きます。ubuntu系は以下を同時押し。CTRL+ALT+T
#
 sudo apt install idle3
#起動 3が必要。
idle3

#以上です。たぶんこれでいいと思います。

2017年8月15日火曜日

ATOM の日本語入力が変=確定前の文字が見えない。1.19はだめ。

確定前の文字が見えないという不具合

http://ppa.launchpad.net/webupd8team/atom/ubuntu xenial/main amd64 atom amd64 1.19.2-1~webupd8~1 [94.9 MB] 23時43分 2017/08/21

治りました。

以下、記録のために残します。


8月8日公開の1.19かな。

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

深く考えずに前のバージョン1.18 に戻しましょう。
次を実行。たぶんこれでOK。AMD64。

$ sudo apt purge atom #まずatomを削除しておく。


$ wget https://launchpad.net/~webupd8team/+archive/ubuntu/atom/+files/atom_1.18.0-1~webupd8~0_amd64.deb && sudo dpkg -i atom_1.18.0-1~webupd8~0_amd64.deb

#しばらくこれATOMのアップデートは無視する運用にしておきましょう。Windowsでも同じみたいですよ。


たぶん、cjkvの人たちは全滅。
事前の7月下旬にバグリポートがあがっていますね。いつか治るのかな??

PPAで入れているのなら、PPAを無効にしておくとよいです。

/etc/apt/..../webupd8team-atom-xenial.list

# deb http://ppa.launchpad.net/webupd8team/atom/ubuntu xenial main
# deb-src http://ppa.launchpad.net/webupd8team/atom/ubuntu xenial main


コメントアウトしておけば、新版に気づきようがないので更新されません。

2017年7月9日日曜日

wine 2.0 stabale インストール

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

#mint18.2では6行です。2分程度で完結します。

wget -nc https://dl.winehq.org/wine-builds/Release.key
sudo apt-key add Release.key
 

sudo apt-add-repository https://dl.winehq.org/wine-builds/ubuntu/
sudo apt-add-repository 'deb https://dl.winehq.org/wine-builds/ubuntu/ xenial main'
 

sudo apt-get update
sudo apt-get install --install-recommends winehq-stable

WineHQの通りです。mint18.2に導入してみました。

https://wiki.winehq.org/Ubuntu 

Launchapad のWine PPAはもう廃棄されます。
利用しないようにしましょう。

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のインストール候補になった気がします。

2017年5月24日水曜日

bash便利帳

自分に便利なワンライナーの雛形

ダミーテキストを作ったりする場合

同じ内容のテキストファイルを1000行作る。for文。
for i in {1..1000}  ; do echo こんにちは。>>こんにちは2.txt ;done

{}内がブレース展開される。結果1000回こんにちはする。
#zshでは、単一コマンドの場合、do/doneを省略できる。
for i in {1..1000}  ; echo こんにちは。>>こんにちは2.txt

#複数の動画ファイルの幅を調べる
mediainfo *.mp4 | grep Width |cat width.txt | perl -pe 's/^.*\: //,s/(\d) (\d\d\d)/$1$2/' | grep -oP '\d{3,4}' | sort | uniq
mediainfo では4桁の場合、空白が入る「1_920」ので、それ[ ]を削除しています。


#再生する動画ファイルの横幅を調べて、変数に格納する。シェルスクリプト内で使うと便利かも。
PIXELS=`mediainfo "$1" | grep Width |perl -pe 's/(\d) (\d\d\d)/$1$2/' | grep -oP '\d{3,4}'`
echo "Width $PIXELS pixels."

たとえば昔のビデオカメラ映像は小さいので、思い切り拡大して再生する。画質がよくなるわけではありませんけれど、幅に応じて拡大サイズを指定すると便利です。

case "$PIXELS" in

        320 )
        mpv --window-scale=6.0 "$1"
        ;;
        1920 )
        mpv "$1"
        ;;
        *)
        mpv --window-scale=1.0 "$1"
        ;;
esac

--window-scale=6.0 は、mpvのオプションです。キーボードでもできます。マウスでもできますが、ちょっと確認するだけなら操作は少ないほうがいいですよね。

大型4k所持者も少しづつ増えてきたので、 FHDは、
mpv --window-scale=1.5 "$1"


にしておいて、クリックで全画面に移行させるというのもいいかもしれません。
#


#
#
#

Sは、suffixのS ものぐさzsh: 実行コマンドを入力せずにファイル名単独でアプリと共に実行する。

Zshで可能で、Bashでできないシリーズ

#説明

% file.flac (enter)

とすると、mpvが起動すると楽といえば楽かもしれないという設定。
言い換えると、拡張子判別実行ですね。 どうなんでしょう?!
設定してから何年もたちますが当方の利用頻度は低いですね。bashが基本なので。

% *.mkv

以下の設定をするとmkv拡張子ファイルがmpvに割り当てているため自動実行されます。便利といえば便利か。

mpv --hwdec=auto --  *.mkv と等価。


以下bashのお話。

bashではこの芸当はできませんので、そこがあれ。bash ならふつうにグロブ展開させるのは同じですが、「mpv 」と入力する必要がありますよね。スペース含めると4文字打鍵。先頭に戻る必要がありますし、5文字打鍵か。

$ mpv *.mkv

mpvで起動する場合は、bash内蔵bindで モデファイラー-m に次のような割当を行っています。これはこれで便利。意味は、カーソル位置がどこにあろうが先頭に移動してmpv以下の文字列で実行する、です。マクロですね。

    bind '"\ea":beginning-of-line' #alt-a も行頭に戻る。この妥協が一番よさそう。

    bind '"\em":"\eampv --start=00:00:00 --profile=vdpau \C-m"' #alt-m
余談:たぶんこう書いても同じです。
    bind '"\em":"\eampv --start=00:00:00 --profile=vdpau \n"' #alt-m
    bind '"\em":"\eampv --start=00:00:00 --profile=vdpau \C-j"' #alt-m

かなり長い文字列がOKみたいです。 mpvは今profile選択をメインにしていますけれど、全部1キー操作に置き換えることもできそう。効率的かはどうかとして。

余談すぎる余談。

ファンクションキーに割りあてる場合。完全1キー。こういう雛形を作成したので、少しづつ何かを割り当てていっています。覚えきれないけれど。笑) .inputrc よりこのほうが自分には調整しやすいかもです。zshのbindkey を並列して眺めつつできるだけ共通化しようと考えているんです。

#f5 f6 f7 f8 雛形
    bind '"\e[15~":"F5"' #F5 にキー割り当て
    bind '"\e[17~":"F6"' #F6 にキー割り当て
    bind '"\e[18~":"F7"' #F7 にキー割り当て
    bind '"\e[19~":"F8"' #F8 にキー割り当て

#接尾辞エイリアス suffixの -s
#拡張子判別実行
#極端な話、全拡張子に xdg-open にしておくとGUIデフォルトなので楽かも。

以下のその1を .zshrc  末尾にでもぺったんして、試してみてください。その2は機械的にPerl で作成しただけなので、まったく触っていませんので、編集しながらお試しください。


#その1 触ってみて採用:雛形 
#極端な話、全拡張子に xdg-open にしておくとGUIデフォルトなので楽かも。

# 引数込で指定もできた。コマンドの妥当性ではなくてどういう書式なのか確かめたということです。

alias -s  mkv="mpv --hwdec=auto -- "
alias -s  mp4="mpv --profile=opengl-hq --hwdec=vdpau -- "
alias -s m2ts="mpv
--hwdec=vaapi -- "
alias -s   ts="mpv --fps=60 -- "
alias -s  wmv=mpv
alias -s  avi=xdg-open

alias -s flac=mpv
alias -s  wav=mpv
alias -s  mp3=mpv
alias -s  ogg=mpv
alias -s  tta=mpv
alias -s  ape=mpv
alias -s  tak=mpv

alias -s  txt=atom
alias -s conf=atom
alias -s  rc=code

#alias -s pl=code 

#実行権限付与したかもしれないテキストは分岐させるか、関連づけないほうがいいですよね。たぶん。
#alias -s plx=code
#alias -s sh=code
#alias -s bash=code

#その2 ががーと生成してみた。すべて未検証
# 拡張子自動判別実行 てきとー::右側にタブいれるとエラーになる。

alias -s  Z=xdg-open
alias -s  gz=xdg-open
alias -s  bz2="bzip2 -cd %C|"
alias -s  deb=xdg-open
alias -s  rpm="rpm2cpio %C|cpio -tv" -f "%a %x %u %g %s %m %d %y %f"
alias -s  7z=xdg-open
alias -s  rar=xdg-open
alias -s  jpg=xviewer
alias -s  JPG=xviewer
alias -s  jpeg=xviewer
alias -s  png=xviewer
alias -s  PNG=xviewer
alias -s  gif=xviewer
alias -s  GIF=xviewer
alias -s  bmp=xviewer
alias -s  BMP=xviewer
alias -s  mpg=mpv
alias -s  wmv=mpv
alias -s  WMV=mpv
alias -s  avi=mpv
alias -s  mp4=mpv
alias -s  m4v=mpv
alias -s  mkv=mpv
alias -s  mov=mpv
alias -s  mpeg=mpv
alias -s  ts=mpv
alias -s  3gp=mpv
alias -s  mp3=mpv
alias -s  m4a=mpv
alias -s  ogg=mpv
alias -s  wma=mpv
alias -s  iso=cvlc
alias -s  flac=mpv
alias -s  wav=mpv
alias -s  tak="paplay -v"
alias -s  tta="paplay -v"
alias -s  ape="paplay -v"
alias -s  cue=audacious
#

2017年5月23日火曜日

シェルスクリプト1行便利帳(うつけ者用)


1行「定型文」 =1行制御構造の活用


横着かつ勉強好きでもないので、1行で押し込めるマイ「定型文」をけっこう使います。エディターの行編集で便利だからですが。1行なので書き足すだけ。複数行は使いにくい。
スクリプトのエレガンス度合いの問題ではなくて、簡便にしたいだけですね。不要になれば行削除できるわけで。
プログラマーではない自分にはあっています。マニュアルを読まない独学素人なので、根本的に何かが違うのかもしれません。ただきちんと間に合っているので悪くはないと思います。


ホーム~でうっかり実行しないようにする「オレンジ行」。ホームには.bashrcが必ずあるので。

#!/bin/bash
#@ Rename(J).pm によるリネーム
#~なら何もしないで終了。
if ls -a | grep -E '.bashrc' ; then exit ; fi

renameall -v
zenity --info \
--text="Rename(J).pm によるリネームが終わりました。\n対象:\n$PWD"

exit

ZiSH

オレンジ行は、.bashrc があれば何もしないで終わる、です。pwdでみてもいいんですがこれのほうが自分にはあってる。もっとかんたんに書けるのなら乗り換えたいです。ファイル存在を確認するより、このgrep を使うパターンひとつのみ覚えると応用がかなりきいてすんごく捗るのでこうしています。(プロの方からはその不真面目な発想を笑われそうですが) もっとも、.ICEauthority の存在をみたほうがいいのかも――とこだわっても仕方がないですね、たぶん。

ついでに、何をしているかを説明すると、

0)ホームにいるなら(.bashrcがあれば)何もしないで終わる。
1)ファイルリネームルールを悉皆適用する(renameall自作コマンド)
2)処理が終わったよダイアログをzenityで出す。マウスクリックで終わり。数分かかる場合があるので実行したことを忘れていたりする(笑)。

このスクリプトをmate/cinnamon で右クリックメニュー実行にしています。ターミナルでは叩きません。 マウス操作では特にうっかり実行してしまうので。あはは。

オレンジ行は単純。grepの返り値でマッチしたらexit。すんごくかんたんな分岐ですが自分のスクリプト中では活用度が高いです。

右クリックメニュー作成について 「右クリックメニューの拡張 scripts nemo caja」

#
#
#
#
#
#
#

2017年5月22日月曜日

利用中シェルに応じてコマンドを使い分ける。bash or zsh

zshとbashを同時並べつつカスタマイズしている最中に便利なコマンドであり、その雛形です。
  • zsh/bashでプロンプトの形や色などで変えていても間違えることがある。
  • キーバインドの統一カスタマイズ作業をしている最中はとりわけ混乱する。
  • 実はかなり間違えている。年に10回以上は:笑)
ので

以下をぺったんして、(当方はシェル関数はbash/zsh 共通のrcファイルにしています。共通で動かない関数は原則使いません。メンテがめんどうだからです。意識は高くないです。~/.bash_functions.rc にzsh/bash共通利用関数を書いています)
以下の実使用中の雛形では、bashrc または zshrc と打てば、rcファイルへの変更が反映されます。shrc というコマンド名もないはずなので、そういうので統一してもいいでしょう。

余談ですが、このパターンを利用して ~.keybindings というキーバインディング設定rcを.zshrc/.bashrcから読み込ませています。
#bash単独ならもちろん不要。
#@ シェル関数定義
#

    function bashrc () {
        #bashrc/zshrc で rc をシェルに応じて再読込。カレントシェル判別。
        CURRENT_SHELL=`set | grep -aoP '^(B|Z)A?SH_VERSION'`

        case $CURRENT_SHELL in
            BASH_VERSION )
              source ~/.bashrc && echo 更新完了 source ~/.bashrc ;;
            ZSH_VERSION  )
              source ~/.zshrc  && echo 更新完了 source ~/.zshrc  ;;
            *)
                echo not zsh , not bash  ;;
        esac
    }
    alias zshrc=bashrc
#zshrc としても、bashrcとしても、同じ。

# BASH_VERSION='4.3.46(1)-release'
# ZSH_VERSION=5.1.1
# csh / tcsh / fish (^fish_)などは使いませんのでこれで充足しています。

#~/.bashrc .zshrc

 if [ -f ~/.keybindings ];         then  .  ~/.keybindings    ; fi

#~/.keybindings

CURRENT_SHELL=`set | grep -aoP '^(B|Z)A?SH_VERSION'`
case $CURRENT_SHELL in

ZSH_VERSION  ) 
#ZSHはここから定義。
    bindkey "\e[3;2~" kill-word  #bash/zsh 共通
    bindkey '^x^e' edit-command-line #FC と等価 bash 標準アサインと統一した。
      ;;

BASH_VERSION )  #BASHはここから定義。

#■ ALT-シリーズ
    bind '"\ea":beginning-of-line' #alt-a も行頭に戻る。この妥協が一番よさそう

;;
esac
#.inputrc に設定するよりこっちのほうが自分は楽。

青色の行でシェル名が変数に格納できますので、bashならほげ、zshなら、ふげというシンプルなcase分岐ができています。(カレントシェルに応じて)同じようなことをしたいけれどコマンド名が微妙に違うってケースは、シェル内蔵コマンド bind(bash)/bindkey(zsh)などでもありますよね。

zsh/bashに特化していますので、
grep で、a=アスキー限定、o=一致部分切り出し、P= Perl互換正規表現
としています。これで、ZSH_VERSION という文字列がCURRENT_SHEL格納できるわけです。
~/binなどにはこの分岐を使った他のツールもおいています。

余談。grep の -Pオプションは、なんだかんだいっても便利です。Perl互換の正規表現だけ覚えていればいいのでGNUツールのみしか使わないって人にはうってつけかも。職業的なプログラマー、SEなどであれば様々なUnix環境に対応したいと思うのでしょうが、自分は関係ないので。そういえば、このオプションでなんとかなっているので、pcregrep/pcre2grep は使いませんね。以前はエクスペリメンタルだった気がしますが、今はカジュアルに使っていいのではないかと。


zshは素晴らしすぎ便利すぎです。だから人間があほになりそう!!とbashを使うんですが、zshもいいよな、と。10年位こんなことを繰り返しています。あはは。もっとインテリジェント、エレガントな解法があれば乗り換えますので、ご教授ください。

#~/.profile mint18.1の .profile(ログインシェルで読み込まれる?!)では次のように書かれていました。さっき気がつきました。


# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi


2017年5月13日土曜日

nemo, nautilus などでサムネイルが表示されない場合

とりあえず、以下を一旦削除して入れ直したら、きれいに治った。(という現象)です。 ubuntu 16.04/mint 18.1 Cinnamon

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

2017年4月23日日曜日

非常事態、パッケージ管理システムのDBが壊れた場合

ハッシュサム不適合な事態に陥った場合などです。

次のコマンドで復旧していましたし、できますが。

年に数回でるようならメモリー不良を疑ったほうがいいかと。
必ず memtest で検査しましょう。
Windowsのメモリーテストはなぜか甘い。
通過したからといってだいじょうぶではありません。

        sudo rm -r /var/lib/apt/lists
        sudo mkdir /var/lib/apt/lists /var/lib/apt/lists/partial
        sleep 2
        sudo apt update


2017年4月20日木曜日

AMD RADEONドライバのできに我慢しきれず。

16.04LTS でのAMD RADEONドライバのできに我慢しきれず。――( [AMD/ATI] Tobago PRO [Radeon R7 360 / R9 360 OEM] )です。――PPAの開発版/Dailyにしました。遅延、コマ落ち、ブロックノイズなどの再生不良に耐えきれなかったからです。


当方では著しい改善が見られています。だけれども非推奨ですね。朝と夕方でぜんぜん質が異なったりしますので、追いかけるのも大変なのです。日に2度は降ってきます。



なぜ入れてみたのか?! ですが、17.04ではとても円滑な動画再生と気がついたからです。
これまでPPA、それもドライバ関係は更新しないように、かなり我慢したのですが、改善がなくそれが16.04LTSの方針だと思う?!と仕方ありません。

LTSの意味が自分の中で消失した瞬間でした。

とはいえ、カーネルでも大差がでたりします。4.8、4.10、4.11などもテストで使っていますが以下が最も安定して速い組み合わせみたいです。CinnamonよりもMATEのほうが不具合が少ないですね。このように独自に調べることが多くて大変。


たぶん次の手順でいれたかと思います。


新規にターミナル(端末)を開きます。ubuntu系は以下を同時押し。CTRL+ALT+T
#
sudo add-apt-repository ppa:oibaf/graphics-drivers
#
sudo apt update
sudo apt upgrade
#当方で安定しているカーネルとDesktop Environment
System:    Host: phantom Kernel: 4.4.0-78-generic x86_64 (64 bit)
Desktop: Cinnamon 3.4.1
Distro: Linux Mint 18.2 Sonya

安定している方はいれないほうがよいと思います。FHDレベルで使っていたら気がつかなかったと思いますが、4Kにしちゃうと遅延だのが目立つわけで、「RADEON最低だな(半分いいがかり、半分は正しい)」。

ppa:oibaf/graphics-drivers ですが、特にmesaで処理が違うようです。FHDにして描画するとまったく気がつかない遅延でも、4K(+Resample 60FPS + vdpau/vaapi)にするとはっきりわかります。そして、ときどき完璧になるのです。ひどい出来の場合は12時間前のドライバをローカルに保存していますので、ざくっと書き戻しています。


現在は改善されていますがW10のプロプライエタリドライバでも春になるまでは遅延していましたので、オープンソースのLinuxドライバの場合はじっくり待つって姿勢が大事なのかもしれません。


自分としてはとてもハッピーです。この水準でLTSなのか?? パーソナル利用については、LTSにこだわる必要がそんなにないのかなとも考えてしまいました。


※追記 2017年5月15日


5/11のupdate以降、動画再生が非常に円滑になりました。4KでのVDPAU遅延コマ落ちが激減しました。グラフィックボードの買い替えも視野においていたのですがそのまま行こうかと思います。


全角数字を半角数字に変換 perl/perl6

全角数字を半角数字にPerlで変換する。3例


たぶんこういうことかな、と。以下フォントによっては判別不能かもしれません。置換前は全角、置換後は半角の数字が指定してあります。

CTRL+ALT+T

#perl5 tr で単純に
perl5 -pe 'tr|[0-9]|[0-9]|'
#perl5 y オプション::sed互換なので歴史的というべきか。
perl5 -pe 'y|[0-9]|[0-9]|'
#perl6では、yオプションは廃止、trのみになる。
perl6 -pe 'tr|[0..9]|[0..9]|'

なれば、trを利用した書き方だけ覚えればいいのではないか。perl6では各種範囲指定も「..」と現代風に切り替わっていくみたいですね。


おまけ:全角数字とメタキャラクター


perl6はデフォルトでは、\dに日本語の全角数字がマッチする。このデフォルトが便利なのか便利でないのかはまだわからない。 「壱」「捌」といったものには流石にマッチしない。さて、うまい利用法はないものか。

ワンライナーであれば6と5を気分と用途に合わせて使い分ければいいのでよい利用方法がそのうち浮かぶかもしれない。 闇雲に置き換えても言葉の意味が正式名から俗称にかわる可能性もあるので行政文書などでは考えた上で使うべきですね。

行政に限らず、第二次を第2次と表記替えしたら、リジェクトされるケースもありますね。

例)perl6で全角数字を食わせてみる。

全角であっても数字はアンダースコアに置き換えるというワンライナー。
echo 5壱7 | perl6 -pe 's:g|\d|_|'

というデフォルト挙動は覚えておかないととんでもないことが起きるかもしれませんね。
抑止などは公式サイトをご覧ください。

2017年4月9日日曜日

指定範囲を抜き出すコマンド|シェル変数を受け取る perl

日本語ドキュメントの取り扱いが主ですが、用語と用語、行番号と用語などPerlに備わっている機能を使ってテキストファイルから行を抜き出すのに、こんな風に使っています。
sオプションでシェル変数を受け取ります。関数やスクリプトにする場合に覚えておくと便利です。Zsh/Bash共通でいけると思います。






新規にターミナル(端末)。ubuntu系は以下を同時押し。CTRL+ALT+T
#
使い方
perlrange 範囲始まりに含まれる行の単語  同じく終わりの行の単語



.bashrc などにぺったんする。

function perlrange () {
        # s オプションでシェル変数受け取れる。qw注意。
        # if [ $# -ge 1 ]; then
        if [ $# -eq 2 ]; then
                perl -nse "print if /$1/ .. /$2/"
           

        else
            echo 説明....

            echo 範囲A-Bを入力。Bが存在しなければ最後まで。
        fi
     }



余談

perl -ne 'print if 10 .. 12'
10行目から12行めから抜き出す。正規表現にしなければ$_行番号になります。

perl -ne 'print if 10 .. /マンゴージュース/'
10行目からマンゴージュースまで抜き出す。正規表現と行番号も組み合わせできます。
 
cd ~ 
ls | sort -r | perlrange Pic Desktop
なんて2行タイプするとイメージがつかめていいかもしれません。
  

2017年3月6日月曜日

ターミナルからググる。bash/zsh 関数

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

#使い方 ターミナルで。
$ ggl 検索語 検索語 検索語

(結果ブラウザが開きます)
#.bashrcにぺったん。
function ggl () { #ターミナルからググる

browser=firefox #vivaldi #firefox # browser指定 google-chrome-stable
        string="" #無駄かも
local searchpara string

searchpara='search?num=100&newwindow=1&hl=ja&q=' # 100
if [ $# = 0 ]; then  # 引数存在

echo 検索語が指定されていません。
else

    for words in $* ; do    # $* 全引数リスト +=%2Bなどの配慮なし
string="$string+$words" #; echo $string
string=`echo $string | perl -pe 's/\A\+//'` #頭の「+」削除
                            done

${browser} https://www.google.co.jp/"${searchpara}${string}" &

  fi
}


.bashrc .zshrc で共通で使えるかと思います。たぶん。


2017年3月2日木曜日

amazonビデオをLinuxで観る

Linux上でamazonプライムビデオを観ています。ちょっといろいろ気になったことがあったので、メジャーブラウザを導入して比較してみました。

視聴の際にLinuxだからという固有手順は何も必要ありません。

HTML5プレイヤー+DRMが動けば再生可能です。

当方が勘違いしていたのですが、silverlight(+WINE)も必要ありませんし、UAも変更する必要はありません。

Linuxでふつうに動作するメジャーブラウザは次の通りです。
  • Vivaldi
  • chrome
  • firefox
  • Opera
  • chromium
視聴可能なブラウザ
  • Vivaldi
  • chrome
  • firefox
  • Opera

amazonプライムビデオが視聴できないブラウザは、chromiumのみ。

  • chromium


当たり前すぎる事実をあえてメモとして残します。abemaTVも普通に見れますね。
たぶんWindowsでも同じなのでしょう。

2017年2月27日月曜日

ATOMのカーソル移動をbash/emacs風にする。

ATOM Editor はめんどくさい?!

端末のbash/zshとエディターのATOMでおおざっぱな動作を統一しています。カーソル移動とyank程度ではシームレスに使いたいためです。最初から多様なキーや機能があらかじめ用意されているVS CODEとは差がありますね。同じエレクトロンという出自ながら最近VS CODEの完成度の高さに感服しています。

ATOM editor をインストールしていない人。ubuntu/mint用

次の2行でインストールできます。
sudo add-apt-repository ppa:webupd8team/atom
sudo apt-get update && sudo apt-get install atom


keymap.cson部分
'body':
  'alt-s': 'core:save'  #ctrl-s 廃止という暴挙にでてもいいかな?!
  'ctrl-f': 'core:move-right'   #bash:右
  'ctrl-b': 'core:move-left'    #bash:左
  'ctrl-d': 'core:delete'       #bash:削除 1文字削除
  'ctrl-h': 'core:backspace'    #bash:削除前

  'ctrl-e': 'editor:move-to-end-of-screen-line' #bash:行末

  'ctrl-m': 'editor:newline'        #改行

  'alt-a': 'core:select-all' #'atom-workspace atom-text-editor':が本来所属するチーム★ここなら、一番下に書いたほうがいいのかもしれない。

'atom-text-editor':
  'ctrl-a': 'editor:move-to-first-character-of-line'    #bash行:先頭

'atom-workspace atom-text-editor':
  'ctrl-w': 'editor:delete-to-beginning-of-word'  #直前単語削除

単純代替できないコマンドのケース


#bash ctrl-u の実現 
パッケージを作るか、コマンドを書きます。後者例
キーアサインを登録します。

'atom-workspace atom-text-editor':

  'ctrl-k': 'atomic-emacs:kill-line' #以下のselectToFirstCharacterOfLine()の 逆を書いてもよい。
#'editor:delete-line' 行削除

  'ctrl-u': 'custom:bash-ctrl-u'#  ctrl-u ができればbash互換。これで完成。

※ctrl-kの逆。カーソル以前を消す。keymap.cson

  'ctrl-w': 'editor:delete-to-beginning-of-word'  #直前単語削除

ctrl-kについてはemacsでも2つの流派みたいなのがありますね。行削除とカーソル以降削除。自分でどうするか決めます。

ctrl-kは、ツーストロークコマンドでもあるので、全体キーバインディングを無効にするか、 少し違うキーで妥協したほうがいいのかもしれません。シェル側を変更するなど。

VS CODEのカスタマイズでもほぼ同じことがいえます。atomic-emacs ではカット動作をオプションで選べますが、全機能キーをいきなり有効にするとemacs風味すぎるので、私は数個のみ使っています。emacs好きな方ならそれでいいのだと思います。

#同時に以下ユーザー定義コマンド(CoffeeScript)を書き足す。
起動スクリプト init.cofee 4行で実現できます。

カーソル前文字列をカットしてそれをクリップボードに入れる
#bash ctrl-u 互換 カーソル前文字列をカットしてバッファに。
atom.commands.add 'atom-text-editor', 'custom:bash-ctrl-u', ->
  editor = atom.workspace.getActiveTextEditor()
  editor.selectToFirstCharacterOfLine()
  editor.cutSelectedText()


これでひととおりのbashシェル風味な機能アサインは完成するかと思います。少なくとも私が多用するbash/zshキーはこれでカバーされています。
ctrl-u位標準で用意されていればいいのにと思ったりもしますが、ATOMめんどくさい。

2017年2月18日土曜日

ATOM editor in 4K/Hi-DPI

ATOM設定画面が小さくて読めないという無理ゲー


WindowsではどうでもないのですがLinuxの当方の環境では、ATOMは絶望的なまでに、フォントが小さいテーマがあります。原因は、px指定しているテーマ設計者が意外に多いからですが、4KでHi-DPIにしないで使っていますので、そりゃ小さいはず。


以下の例はあえて極端に大きいフォントサイズですが次のようなスタイルシートを貼り付けてみてください。それから適宜調整を開始してみると良いです。オンタイムでできますから。
日本人の平均年齢以上対象(知ると我が国の将来が絶望的になる数字)にしています。

'ABC hare' は小生作成のエディター用フォントです。theme-uiで12px指定などになっていると4kにしたら恐ろしく小さくなりますね。themeファイルをいじるのは後回しのほうが効率がいいかと思います。

スタイルシートが空なら、そのままぺったん。何かあれば末尾にペイストしてください。


EDIT ~/.atom/styles.less


.status-bar { font-size: 250%;
    font-family: 'ABC hare' ;
}

.command-palette {
   font-size: 160%;
}

atom-pane {
     font-size: 200%;
}

.settings-title .settings-view .setting-description {
  font-size: 150%;
  font-family: 'ABC hare' ;
}


.tree-view,
.tab-bar .title {
    font-size: 180%;
    font-family: 'ABC hare' ;
}


//atom-panel-container,
atom-panel-container.bottom atom-panel {
    background-color: darkorange ;
    font-family: 'ABC hare' ;
    font-size: 240%;
    padding:0.9em;
    atom-text-editor {
        div.line, div.placeholder-text {
            font-size: 240%;
            font-family: 'ABC hare' ;
        //padding:0.0em;
        }
    }
}
#

2017年2月11日土曜日

Perl6 のインストールとOneLiner ワンライナーメモ よくある自分

ターミナル(端末)。ubuntu系は以下を同時押し。CTRL+ALT+T

#Perl6 rakudo::  How to install 
(2017/01 最新版をいれてみる)
#以下がないとコンパイルできません。 
sudo apt install build-essential git libssl-dev
 
#ここからソースゲットとコンパイル  
wget http://rakudo.org/downloads/star/rakudo-star-2017.01.tar.gz
tar xfz rakudo-star-2017.01.tar.gz 
cd rakudo-star-2017.01
sudo perl Configure.pl --gen-moar --prefix /opt/rakudo-star-2017.01     
sudo make install

たぶんこれでOK。上記サイトをよくご覧の上実行してください。PATHはマニュアルで設定しました。

PATH="/opt/rakudo-star-201701/share/perl6/site/bin:/opt/rakudo-star-201701/bin:$PATH"

当方は、日付部分をドットなしでインストールしています。


perl6 -v
This is Rakudo version 2017.01 built on MoarVM version 2017.01
implementing Perl 6.c.

#Perl6の場合
cd ; pwd #homeで。
(どこでもいいが4つぐらいファイルがあると便利)

echo >zshzsh.delete.txt #という名前のファイルを作成。
touch zshZSH.delete2.txt #という名前のファイルを作成。 
touch fshFSH.delete.txt #という名前のファイルを作成。
touch fshFSH.delete2.txt #という名前のファイルを作成。

文例)lsでリストをとり、そのなかのzshという小文字名があるファイルのみの置換結果を表示する。その他のファイルはリストしない。だから、安易に -peは使えない。

 ls | perl6 -ne 'print $_ if $_ ~~ s:i|zsh|BBB(ZSH)| '   #改行なし

 ls | perl6 -ne    'say $_ if $_ ~~ s:i|zsh|BBB(ZSH)| '   #sayで改行付き。
 ls | perl6 -ne    'say $_ if s:i|zsh|BBB(ZSH)| '   #sayで改行付き。さらに省略。

(置換条件を追加)
ls | perl6 -ne    'say $_ if ( s:i|zsh|BBB(ZSH)| and s|delete|削除するファイル| ) '  BBB(ZSH)ZSH.削除するファイル2.txt
BBB(ZSH)zsh.削除するファイル.txt
#Perl5の場合
ls | perl -ne 'print $_ if $_ =~ s|zsh|BBB(ZSH)|i'
#Perl5はさらに省略できる。Perl6はprintは裸ではだめ。
ls | perl -ne 'print if $_ =~ s|zsh|BBB(ZSH)|i '
#Perl5はさらに省略できる。通常ワンライナーではこの書き方の人が多いと思う。
 ls | perl -ne 'print if s|zsh|BBB(ZSH)|i '

現実的にはperl5では自分はこう書きます。

ls *zsh* | perl -pe 's|zsh|BBB(ZSH)|i '

ls *zsh* | perl6 -pe 's:i|zsh|BBB(ZSH)| '  #(perl6では)



  • Perl5でも最近のものは宣言すれば、sayが使える。文字数が増えるのでワンライナー向きではない。aliasなどに指定しておく手はある。
  • Perl5とPerl6では正規表現や文法が異なる。この例では、iの位置。前にもってくることで実行速度が速くなるらしい。と英語であった。このような短文字列なら大差はないが長文になった場合は、最後まで読まないとiだったのかぁとPerlが気がつくのが遅れると理解すればいい。つまり、最後に「あー、それからいい忘れていたけど、大文字小文字区別しないからね」といわれるより、最初からいってくれよ。聞いてないよーというネタみたいな話として解釈することにした。
  • 演算子というのかな。~~、=~ みたいなの。Perl5とPerl6で意味が違う。こういう違いがあるので、単純にPerl5で書いたスクリプトに6という文字をつけても怒られるだけである。
  •  Perl5はなくてならならない道具だけれども、見本で示したようなケースはよいのですが行数が増えてくるとPerl6には簡単には移行できそうにないです。というか、今のままでよいです。汗)
  •  極めて個人的には、「あれ、この正規表現、通らないや!!」というとき、ワンライナーレベルならPerl6で実行するとすんなり思ったようになったりしますね。 その微妙さがわからない。
  • ?after ?before みたいな指定方法はPerl5に比べてわかりやすいな!!とか、少ないメタ文字の中でPerl開発者の皆さんが苦労されているのが忍ばれます。追加で9から16個ぐらいメタ文字が増えると世界が変わるのでしょうけれど。$シリーズなんて大活躍しすぎです(覚えにくかった)。

試しているrakudo(古いことに気がついたので、冒頭の2017/01版を導入しました)
perl6 -v
This is perl6 version 2015.11 built on MoarVM version 2015.11

2017年2月10日金曜日

GPUドライバ関連の刷新でハッピー

祝、HW支援安定


2017/02/10早朝、GPU関連のドライバが一気にアップグレードされました。
気がついた範囲でいば、VDPAUを有効にしたほうが遅いとか、VDPAU有効の方が重いとか、そういう面白い現象がなくなったかもしれません。 ありがとうございます。

hwdec=no で使っていましたが、hwdec=vdpauに戻したmpv。mpvの動作が著しく軽くなりました。まだまだですが、少しづつよくなっていってほしいです。(耐性がついた)

当方は、amdですが、nvidiaの方も変化があるのかもしれません。



libdrm-amdgpu1/xenial-updates 2.4.70-1~ubuntu16.04.1 amd64 [2.4.68-1~ppa からアップグレード可]
libdrm-intel1/xenial-updates 2.4.70-1~ubuntu16.04.1 amd64 [2.4.68-1~ppa からアップグレード可]
libdrm-nouveau2/xenial-updates 2.4.70-1~ubuntu16.04.1 amd64 [2.4.68-1~ppa からアップグレード可]
libdrm-radeon1/xenial-updates 2.4.70-1~ubuntu16.04.1 amd64 [2.4.68-1~ppa からアップグレード可]
libdrm2/xenial-updates 2.4.70-1~ubuntu16.04.1 amd64 [2.4.68-1~ppa からアップグレード可]
libegl1-mesa/xenial-updates 12.0.6-0ubuntu0.16.04.1 amd64 [11.2.0-1ubuntu2.2 からアップグレード可]
libegl1-mesa-drivers/xenial-updates 12.0.6-0ubuntu0.16.04.1 amd64 [11.2.0-1ubuntu2.2 からアップグレード可]
libgbm1/xenial-updates 12.0.6-0ubuntu0.16.04.1 amd64 [11.2.0-1ubuntu2.2 からアップグレード可]
libgl1-mesa-dri/xenial-updates 12.0.6-0ubuntu0.16.04.1 amd64 [11.2.0-1ubuntu2.2 からアップグレード可]
libgl1-mesa-glx/xenial-updates 12.0.6-0ubuntu0.16.04.1 amd64 [11.2.0-1ubuntu2.2 からアップグレード可]
libglapi-mesa/xenial-updates 12.0.6-0ubuntu0.16.04.1 i386 [11.2.0-1ubuntu2.2 からアップグレード可]
libgles1-mesa/xenial-updates 12.0.6-0ubuntu0.16.04.1 amd64 [11.2.0-1ubuntu2.2 からアップグレード可]
libgles2-mesa/xenial-updates 12.0.6-0ubuntu0.16.04.1 amd64 [11.2.0-1ubuntu2.2 からアップグレード可]
libklibc/xenial-updates 2.0.4-8ubuntu1.16.04.3 amd64 [2.0.4-8ubuntu1.16.04.2 からアップグレード可]
libosmesa6/xenial-updates 12.0.6-0ubuntu0.16.04.1 amd64 [11.2.0-1ubuntu2.2 からアップグレード可]
libwayland-egl1-mesa/xenial-updates 12.0.6-0ubuntu0.16.04.1 amd64 [11.2.0-1ubuntu2.2 からアップグレード可]
libwxbase3.0-0v5/xenial-updates 3.0.2+dfsg-1.3ubuntu0.1 amd64 [3.0.2+dfsg-1.3 からアップグレード可]
libwxgtk3.0-0v5/xenial-updates 3.0.2+dfsg-1.3ubuntu0.1 amd64 [3.0.2+dfsg-1.3 からアップグレード可]
libxatracker2/xenial-updates 12.0.6-0ubuntu0.16.04.1 amd64 [11.2.0-1ubuntu2.2 からアップグレード可]
linux-firmware/xenial-updates,xenial-updates,xenial-security,xenial-security 1.157.8 all [1.157.6 からアップグレード可]
mesa-va-drivers/xenial-updates 12.0.6-0ubuntu0.16.04.1 amd64 [11.2.0-1ubuntu2.2 からアップグレード可]
mesa-vdpau-drivers/xenial-updates 12.0.6-0ubuntu0.16.04.1 amd64 [11.2.0-1ubuntu2.2 からアップグレード可]

2017年2月7日火曜日

mpv で外部の音声ファイルを個別指定する。audio-file

たとえばオーサリング過程のBGM効果の検証など


めんどくさいアプリで確認したりする前に、次のように指定すると、音声だけが別トラック指定できるので、なんとなく雰囲気をつかむ場合ははやくていいかもってお話です。

オプションで、BGMにする音を指定します。オリジナルの動画ファイルの音声は再生されませんので、これはこれで便利かと思います。車載動画なんかの編集をする前に雰囲気つかむにはいいかも。

Smplayerなどでは、メニューから外部音声ファイルを選べば同じことができます。



#
mpv --audio-file=./audio.mp3 movie.mp4


2017年2月1日水曜日

リビングのこたつから書斎PCを覚醒させる。Wake On LAN (ubuntu16.04/Mint18.1)

リビングのこたつから書斎PCを覚醒

 
(1)ツール導入 Wake on Lan 必須
sudo apt install ethtool

(2)ファイル追記。
sudo vi /etc/rc.local
interface=enp4s0
logger -t 'wakeonlan init script' enabling wake on lan for $interface
ethtool -s $interface wol g

これだけです。うちの環境は、ルーターやモデムの電源そのものを完全に切断するタイマーを設置しているので、このほうが都合がいいみたいです。というか、これが一番いいんじゃないか?!です。2ヶ月以上この設定ですがノートラブル。

以下、あまり参考にしないでください。
読むなら、https://help.ubuntu.com/community/WakeOnLan
をどうぞ。

記録のために以下に試行錯誤メモを残しております。


家、しかもこたつからやったらダメ人間養成器じゃないのかという議論はごく一部にありますが、新規にターミナル(端末)を開きます。ubuntu系は以下を同時押し。CTRL+ALT+T

#有効にするには、ほとんどのケースでは何も考えずに次を実行して(さらに何も考えずに)リブート。その際にBIOSの設定が正しいかも確認しておきましょう。
#Wake on Lan 必須
sudo apt install ethtool

#削除しました。
sudo apt-get install powernap
たぶんこれだけでリビングのこたつからスマホを使って書斎PCを覚醒させるには十分だと思います。

#次いで確認:昔(4年前かな)と違うところ。現在のネットワークマネージャー経由
enp4s0かどうか(インターフェイス名)は、
ifconfig とターミナルで実行。通常①行目の左端に表示されます。


sudo ethtool enp4s0 | grep Wake-on
    Supports Wake-on: pumbg
    Wake-on: g <<ここ大事!

これでもいいです。
sudo ethtool enp4s0 | grep -oP 'Wake-on: (.)$'
sudo ethtool enp4s0 | grep 'Wake-on' | grep -v 'Supports'
※インターフェイス名注意 昨今は伝統的な eth0 ではないです。
「g」となってないとだめです。
上記のpowernap いれて再起動するだけで何も考えなくていい(はず)。ではなかった。

よって以下を追記します。
==========

起動時にethtoolを有効にする。ための作業。


①ファイルを作る(注意してください。起動時に実行されるファイルです)
sudo gedit /etc/init/wakeonlan.conf
---以下6行をペイスト
start on started network
script
    interface=enp4s0
    logger -t 'wakeonlan init script' enabling wake on lan for $interface
    ethtool -s $interface wol g
end script

---保存

②実行属性をつける。不要だと思うけど。
sudo chmod +x /etc/init/wakeonlan.conf

このふたつで基本的に終わり。再起動して確認して見てください。

③念の為再起動する前に動かしてみる。
 
sudo service wakeonlan start

sudo ethtool enp4s0 | grep Wake-on

gになっているか?! Wake-on: g

④ほんとうの確認
再起動してほんとうに自動的に設定されているか確認する。 冒頭に戻る。

sudo ethtool enp4s0 | grep Wake-on


gになっているか。Wake-on: g

追記:何もしないでいけたのは以前かも。長らくアップグレードし続けた環境ではなく新規インストール環境ではうまくいきませんでしたので。


マザーボードのBIOS設定が完了しているという前提です。http://poor-user.blogspot.jp/2012/12/wol.html が5年前に書いた記事。5年前はアイフォンを使っていたみたいです。

いまどきのandroidアプリであれば、どれでもいいんじゃないか、と思います。インターフェイスのボタンの大きさが好みだとか押しやすいとかそんな基準で★★★★4.以上ならOKかと。

参考、参照サイト
https://play.google.com/store/search?q=wake%20on%20lan&c=apps&price=1&rating=1&hl=ja

kodi http://kodi.wiki/view/HOW-TO:Set_up_Wake-on-LAN_for_Ubuntu

2017年1月27日金曜日

MPVの最新バージョンはよいかもしれないというお話

mpv PPA最新/mpv git-39adaf3で救われたかもしれません。

当方がしつこくテストに使っている4K:

「大阪・陸上篇 同じ志の仲間と、いつか、大きな花を咲かせる/4K映像【パナソニック #ビューティフルジャパン 】」です。


URLが間違っていたら、4K表示ができるものを探してみてください。当方ではブラウザ標準では4Kではがくがくどころか停止します。ローカルに4Kでダウンロードして再生テストをしています。

  • VLC 壊滅的
  • SMPLAYER(エンジンMPV) ひどい
  • ビデオ(標準のTOTEM) 遅延
どれもまともにみられません。
カスタマイズしたMPV がもっともましってかんじです。
よって、当該動画のほんとうの美しさを私はみたことがありません。まだノイズがみえる:笑)
3メートル離れると気が付きません。


春ごとPC周りは刷新するのでそれくらいには。

話は戻ります。


#mpv.conf(メディアファイルのディレクトリ毎においています)

メインのconfigに
use-filedir-conf=yes #mpv.conf #有能
という行を記述していないと有効になりません。

2016年9月以降のオプション指定方式
fullscreen=yes
pause=yes
#no-border
framedrop=decoder+vo

#interpolation
#video-sync=display-resample
#display-fps=60

        #scale=ewa_lanczossharp
        #cscale=ewa_lanczossharp
#    cscale-antiring=1.0
#    cscale-radius=4.0
#    scale-antiring=1.0
#    scale-radius=2.0
        #dscale-antiring=1.0
        #dscale=1.0

#vo-vdpau-chroma-deint
#vo-vdpau-colorkey
#vo-vdpau-composite-detect
vo-vdpau-deint=1
vo-vdpau-denoise=1
#vo-vdpau-force-yuv
#vo-vdpau-fps=60
vo-vdpau-hqscaling=9 #9
vo-vdpau-output-surfaces=2
#vo-vdpau-pullup
#vo-vdpau-queuetime-fs=1
#vo-vdpau-queuetime-windowed=
#vo-vdpau-sharpen=0.5 #1



#過去の設定様式

#vo=opengl-hq:scale=ewa_lanczossharp:cscale=ewa_lanczossharp:cscale-antiring=1.0:scale-antiring=1.0:scale-radius=1.0:cscale-radius=1.0
#vo=opengl-hq:scale=ewa_lanczossharp:cscale=ewa_lanczossharp:cscale-antiring=1.0:scale-antiring=1.0:scale-radius=6.0:cscale-radius=4.0
#vo=opengl-hq:scale=ewa_lanczossharp:cscale=ewa_lanczossharp:cscale-antiring=1.0:scale-antiring=1.0:scale-radius=4.0:cscale-radius=1.0

#このMPVバージョンにさきほど切り替えました。ほとんどの問題が解決したかもしれません。
$ mpv
   cplayer: mpv git-39adaf3 (C) 2000-2017 mpv/MPlayer/mplayer2 projects
   cplayer:  built on Thu Jan 26 15:05:14 UTC 2017
#PPA版のインストール
sudo add-apt-repository ppa:mc3man/mpv-tests
sudo apt update
sudo apt upgrade
sudo apt install mpv

2016年9月以降のmpv 0.21以降だったと思いますがオプション指定方式がかなりかわっています。追いかけるにはgithubをみるしかありません。たとえばこちらです。けっこうめんどくさいです。https://github.com/mpv-player/mpv/wiki/Option-replacement-list#mpv-0210 

2017年1月26日木曜日

WINE 2.0 なんだかおめでとうございます。

インストールは、ubuntu/mintの場合

https://wiki.winehq.org/Ubuntu

です。感慨ぶかいですね。さっそく導入してみました。

30分ぐらい、あーでもない、こーでないとやったんです。
今は、2.0で動いてます。

たぶんですね。古いバージョンはとにかくごっそり削除しない
とうまくなかったかんじですね。なんか一個のこっていた模様。

綺麗にはいったとは言いがたいです。
つまり、WINEではじめてトラブりました。


うちだけ?!

とりあえず動かすのに問題はない程度です。

PlayOnLinuxではまだ2.0RC付き版みたいで、候補最終版に入れ替えました。


2017年1月25日水曜日

mpvでオーディオチャネル選択でバグる場合。mpv --aid=n

大抵の場合マウス選択でうまくいくのですが、まれにうまくいかない。いっても音が途切れるなどの症状がでることがあります。そういった場合は、コマンドラインで起動して明示的音声トラックを指定します。偶然発見したので他によい方法があるのかもしれません。


事例は、aidが1-5まで用意されていて、3への切り替えがマウス操作ではうまくいかない場合です。

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

mpv --aid=3 douga.file.mp4



2017年1月17日火曜日

AMD RADEON 4k 3840x2160 60Hz で表示。ubuntu/Mint

AMD RADEONでも4K 60Hz表示ができます。

必須条件


  • 4k60Hz対応モニター(DP入力端子。またはDPからHDMIに変換する場合はそれが60Hzに対応していることが必要ですし、それ用のコンバートケーブルが必要です)
  • 適切なグラフィック(例RADEON R7360)
  • DisplayPort出力
  • 4K対応ケーブル
 ケーブルはいまどき490円程度のでもふつうに使えますね。間違えると4Kにならないのでご注意ください。数年前のDPケーブルだとまず対応していないと思います。

うっかり間違える可能性。MAC用でOKだろうと思っていたら、MACでは30Hzしか対応していなかった、みたいなことです。よく注意して買い物したほうがよいと思います。

さて、話は本筋に戻ります。

流れは

  • 1)cvtコマンドで状況確認(以下のオレンジをメモ:cvtコマンドで状況確認/必須作業のModeline移行の文字列が重要)
  • 2)xrandr --newmode
  • 3)xrandr --addmode
  • 4)xrandr --output
これだけです。

2-4は、.xprifile、.profileに書くなりするといいですが、ノースクリーンになると困るのでいったん普通に起動して、コマンドで切り替えたほうがいいかもしれませんね。チラツキなどがなく安定するようなら完全自動にすればいいと思います。

当方の場合(2-4)は次の3行で完結します。よくみると簡単なパターンです。

xrandr --newmode "3840x2160R"  533.00  3840 3888 3920 4000  2160 2163 2168 2222 +hsync -vsync
xrandr --addmode DisplayPort-0 "3840x2160R"
xrandr --output DisplayPort-0 --mode "3840x2160R" 

xrandrで今どうなっているか見てみる。当方の現在例


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



$ xrandr
Screen 0: minimum 320 x 200, current 3840 x 2160, maximum 16384 x 16384
DisplayPort-0 connected primary 3840x2160+0+0 (normal left inverted right x axis y axis) xxx yyy
   3840x2160     30.00 +  25.00    24.00    29.97    23.98
   1920x1080     60.00    50.00    59.94    24.00    23.98
   1920x1080i    60.00    50.00    59.94
   1680x1050     59.88
   1280x1024     60.02
   1280x960      60.00
   1360x768      60.02
   1280x800      59.91
   1280x720      60.00    50.00    59.94
   1024x768      60.00
   800x600       60.32    56.25
   720x576       50.00
   720x576i      50.00
   720x480       60.00    59.94
   720x480i      60.00    59.94
   640x480       60.00    59.94
   720x400       70.08

   3840x2160R    59.97
   3840x2160_60.00  59.98
   3840x2160_59.00  58.98*
   3200x1800_60.00  59.96
   3600x2025_59.00  58.96
   2560x1440_60.00  59.96 
HDMI-0 disconnected (normal left inverted right x axis y axis)
DVI-0 disconnected (normal left inverted right x axis y axis)

黄色は自分で登録した解像度、周波数です。

アスタリスクが末尾に付いている解像度で表示されています。 

余談

当方がここで確認しているのは、「標準では4K/60Hzモードがないこと」です。あればそれを利用すればいいわけですから。
---------------------------

余談の余談

以下の解像度も使えます。 4Kで重い処理になりすぎる場合に一時的に解像度変更してみたりしています。オープンソースドライバがもう少し速ければいいんですけどね。利用したい場合はそれぞれ2行分の追加が必要です。

xrandr --output DisplayPort-0 --mode "2560x1440_60.00" 
xrandr --output DisplayPort-0 --mode "3200x1800_60.00"

cvtコマンドで状況確認/必須作業


cvt 3840 2160
# 3840x2160 59.98 Hz (CVT 8.29M9) hsync: 134.18 kHz; pclk: 712.75 MHz
Modeline "3840x2160_60.00"  712.75  3840 4160 4576 5312  2160 2163 2168 2237 -hsync +vsync

cvt -r 3840 2160
# 3840x2160 59.97 Hz (CVT 8.29M9-R) hsync: 133.25 kHz; pclk: 533.00 MHz
Modeline "3840x2160R"  533.00  3840 3888 3920 4000  2160 2163 2168 2222 +hsync -vsync

オレンジが重要

#~/bin/4k 4Kを選択するスクリプト例 無駄な説明付き


結局は、青のxrandr行の3行を発行するだけです。

4k 引数

使い方

2 FHDにする
3 30Hzにする
6 60Hzにする。59.98Hz
R 60Hzにする。59.97Hz -0.01Hzで安定した。カーネルによるかもしれない。
なし Rと同じ。

-------------------------------------------------------------------------
#!/bin/bash
# -x
# 4k 60Hz
#
#
#
#Procedure


    RES=`xrandr | grep -oP '^(.*?\.\d\d)\*' | sed 's/\*//'` ; echo "$RES"


                 #   3840x2160_60.00  59.98 チラつく
if xrandr -q | grep -E '3840x2160_60.00' ; then
#if xrandr -q | grep -E '3840x2160_60.00  59.98' ; then
#if xrandr -q | grep -E '3840x2160R    59.97' ; then
        echo ready 60Hz mode.モード登録済み。省略。
    else
        echo entry 60Hz mode.モード登録する。作業。
    #Res.Ent: newmode
        xrandr --newmode "3840x2160_60.00"  712.75  3840 4160 4576 5312  2160 2163 2168 2237 -hsync +vsync
        xrandr --newmode "3840x2160R"  533.00  3840 3888 3920 4000  2160 2163 2168 2222 +hsync -vsync
        #NG!! xrandr --newmode "3840x2160_61.00"  725.00  3840 4160 4576 5312  2160 2163 2168 2239 -hsync +vsync
    #Res.Add: addmode
        xrandr --addmode DisplayPort-0 "3840x2160_60.00"
        # NG!! xrandr --addmode DisplayPort-0 "3840x2160_61.00"
        xrandr --addmode DisplayPort-0 "3840x2160R"
fi

    echo previous : `xrandr | grep '*' `

    case "$1" in
        "2"  | "2k" | "fhd" | "1080" )
            xrandr --output DisplayPort-0 --mode "1920x1080"    ;;
        "3"  | "30" | "4k" | "2160")
            xrandr --output DisplayPort-0 --mode "3840x2160"    ;;
        "6"  | "60" )
            xrandr --output DisplayPort-0 --mode "3840x2160_60.00"    ;;
        #"61"  | "i" )
        #    xrandr --output DisplayPort-0 --mode "3840x2160_61.00"    ;;
        "R" | "r" )
            xrandr --output DisplayPort-0 --mode "3840x2160R"    ;;
        * )
            #xrandr --output DisplayPort-0 --mode "3840x2160_60.00"    ;;
            xrandr --output DisplayPort-0 --mode "3840x2160R"    ;;

    esac

    echo and now! : `xrandr | grep '*' `
echo done
exit

<
#       1920x1080     60.00    50.00    59.94    24.00    23.98
#       3840x2160     30.00*+  25.00    24.00    29.97    23.98
memo
#

追記:ちょっと変更して試験中(これで決まりか?!)

cvt 3840 2160 59
# 3840x2160 58.98 Hz (CVT) hsync: 131.87 kHz; pclk: 700.50 MHz
Modeline "3840x2160_59.00"  700.50  3840 4160 4576 5312  2160 2163 2168 2236 -hsync +vsync
xrandr --newmode "3840x2160_59.00"  700.50  3840 4160 4576 5312  2160 2163 2168 2236 -hsync +vsync
xrandr --addmode DisplayPort-0 "3840x2160_59.00" 
xrandr --output DisplayPort-0 --mode "3840x2160_59.00" 

余談。

AMD での4Kは、プロプラなドライバでないとだめかなと思っていた上、askubuntuなどでもRADEONはだめだよっていう記事があったりしたので、ふーん、と思っていました。実際、やってみると普通にできたので方法を記載します。R7360は、AMDで最低ラインの4K対応グラフィックボードと思っていただければよいです。まだ売っているみたいですが現行品ではありません(ほんの一瞬の商品だった)し、16.04にはプロプラドライバも提供されていません。

(ひとりごとのひとりごと。やっぱ fglrx カモーンだな。まさかの「瞬間打ち切り」になるとは思ってなかった。というか、買ってから一度もプロプラドライバの恩恵にあずかったことはないのだけど。マイナー悲哀)

43インチ4Kにダウンしました。

Screen 0: minimum 320 x 200, current 3840 x 2160, maximum 16384 x 16384
DisplayPort-0 connected primary 3840x2160+0+0 (normal left inverted right x axis y axis) 953mm x 543mm
   3840x2160     60.00 +  30.00    25.00    24.00    29.97    23.98  
   1920x2160     59.99  
   2560x1440     59.95  
   1920x1080     60.00    60.00    50.00    59.94  
   1920x1080i    60.00    50.00    59.94  
   1680x1050     59.95  
   1280x1024     75.02    60.02  
   1440x900      59.89  
   1280x960      60.00  
   1280x720      60.00    50.00    59.94  
   1024x768      75.08    70.07    60.00  
   832x624       74.55  
   800x600       72.19    75.00    60.32    56.25  
   720x576       50.00  
   720x480       60.00    59.94  
   640x480       75.00    72.81    66.67    60.00    59.94  
   720x400       70.08  
   3840x2160R    59.97* 
   3840x2160_60.00  59.98  
   3840x2160_59.00  58.98  
   3200x1800_60.00  59.96  
   3840x2160_60.50  60.48  
   3840x2160_30.00  29.98  
   3840x2160_60.10  60.09  
   3840x2160_59.99  59.98  
   3840x2160_59.98  59.96  
   3840x2160_59.97  59.96  
   3840x2160_59.96  59.94  
   3840x2160_59.95  59.94  
HDMI-0 disconnected (normal left inverted right x axis y axis)
DVI-0 disconnected (normal left inverted right x axis y axis)

オレンジの解像度がもっとも良い結果を示してくれます。
PHILIPS フィリップス BDM4350UC/11 42.51インチ