cronに特化したPodcastアグリゲータ/ダウンローダのpodgetを試す

先日試したpodracerは何気に10年前のソフトでメンテナンスもされていないし,起動中に強制終了するとゴミが残って次から起動しなくなったりとかとか結構不満点が出てきました.

今は前処理を以下のようにして,

if [ $(pgrep podracer) ] ; then
  echo 'running podracer.'
  exit -1
fi
 
echo run podracer
if [ -f ~/.podracer/tempsub ] ; then
  rm ~/.podracer/tempsub
  echo 'rm tempsub'
fi

プレイリストもこんな感じで別に作ってます.

cd ~/podcasts
PODCASTLIST=($(cd ~/podcasts ; find . -mmin -$LISTTIME -type f -print0 | xargs -0n1 file | grep -i audio | cut -f1 -d:))
if [ ${#PODCASTLIST[@]} -eq 0 ] ; then
  echo 'podcast not found.'
  exit -1;
fi
 
echo num = ${#PODCASTLIST[@]}
ls -1tr ${PODCASTLIST[@]} > ~/podcasts/todayspodcast.m3u

後者はDebianの方にはバグ報告をしていますが音沙汰がない感じです.

他にないかなーと探して(apt-cache search podcast)podgetというものを見つけました.

$ apt show podget | grep -A99 Description:
 
Description: cron 用に最適化された Podcast アグリゲータ/ダウンローダ
 Podget はシンプルな podcast アグリゲータであり、定期的なバックグランドジョブ
 (すなわち cron) として起動するために最適化されています。RSS および XML フィード
 からの podcast のダウンロード、ファイルをソートしてフォルダやカテゴリごとに格納、
 iTunes PCAST ファイルおよび OPML リストからの URL のインポート、M3U および ASX
 プレイリストの自動生成、そして古くなったファイルの自動クリーンアップのサポート
 が特徴です。また、MS Windows サーバ上にホストされた podcast の UTF-16 自動変換も
 特徴です。
 podget を一旦起動すると、ユーザ設定ファイルを $HOME/.podget にインストール
 しますので、そのファイルをカスタマイズできます。

cronに特化していて便利そうなので試してみます.

導入

Debian stretch testing/Rasbian jessie/Ubuntu 14.04 で確認しました.

$ sudo apt install podget

初期化

$ podget -h
 
Usage /usr/bin/podget [options]
 
    -c --config <FILE>           Name of configuration file.
    -C --cleanup                 Skip downloading and only run cleanup loop.
    --cleanup_simulate           Skip downloading and simulate running
                                 cleanup loop.
                                 Display files to be deleted.
    --cleanup_days               Number of days to retain files.  Anything
                                 older will be removed.
    -d --dir_config <DIRECTORY>  Directory that configuration files are
                                 stored in.
    -f --force                   Force download of items from each feed even
                                 if they have already been downloaded.
    --import_opml <FILE or URL>  Import servers from OPML file or
                                 HTTP/FTP URL.
    --import_pcast <FILE or URL> Import servers from iTunes PCAST file or
                                 HTTP/FTP URL.
    -l --library <DIRECTORY>     Directory to store downloaded files in.
    -p --playlist-asx            In addition to the default M3U playlist,
                                 create an ASX Playlist.
    -r --recent <count>          Download only the <count> newest items from
                                 each feed.
    --serverlist <list>          Serverlist to use.
    -s --silent                  Run silently (for cron jobs).
    --verbosity <LEVEL>          Set verbosity level (0-4).
    -v                           Set verbosity to level 1.
    -vv                          Set verbosity to level 2.
    -vvv                         Set verbosity to level 3.
    -vvvv                        Set verbosity to level 4.
    -h --help                    Display help.

初回起動時に設定ファイルなどが作成されます.引数無しで実行すると初期設定の中のpodcastをダウンロードするので--cleanup_simulateオプションを付けて実行すると良さそうです.
設定ファイルは規定値では~/.podget以下に作成されます.

$ podget --cleanup_simulate
$ ls -lA ~/.podget
合計 8
-rw-rw-r-- 1 mk mk 3652  2月 19 05:34 podgetrc
-rw-rw-r-- 1 mk mk 1131  2月 19 05:34 serverlist
  • podgetrc : 設定ファイル
  • serverlist : podcastのリスト

設定ファイルの用意

お好みで設定ファイルの~/podgetrcを編集します.私は以下の辺りを書き換えました.

ログファイルを有効に

# Directory to store logs in
dir_log=/home/mk/POD/LOG

プレイリストの年月日の形式を書き換え

# Date format for new playlist names
date_format=+%Y-%m-%d

Podcastの取得数を3つに

# Most Recent
# 0  == download all new items.
# 1+ == download only the <count> most recent
most_recent=3

サーバリストの作成

取得するPodcastを~/.podget/serverlistに書いていきます.

書式はスペース区切りで

URL カテゴリー 番組名

になっています.podgetを実行した時に
カテゴリー/番組名/番組というふうにディレクトリが掘られます.
具体的にはこんな感じで書いていきます.

http://feeds.feedburner.com/weblogs/csc tech 電脳空間カウボーイズ
http://feeds.backspace.fm/backspacefm tech backspace.fm
http://www.joqr.co.jp/science-podcast/index.xml science 日立ハイテクプレゼンツ 大村正樹のサイエンスキッズ
http://www.tbsradio.jp/life/rss.xml etc 文化系トークラジオ Life
http://www.tbsradio.jp/cycle-r/index.xml bike ミラクル・サイクル・ライフ
http://sokoani.com/feed anime そこあに
  :

他のアプリケーションらの移行でOPMLファイルのエクスポートが可能な場合はそのファイルやURLを元にインポートできるようです.※未確認

$ podget --import_opml <FILE or URL>

若しくはPCAST形式(iTunes向け?)も同様に利用できるようです.※未確認

$ podget --import_pcast <FILE or URL>

OPML書き出しの機能もあります.但しこの機能は
Ubuntu 14.04の0.6.9にはなく,
Rasbian jessieの0.7.3,
Debian stretchの0.7.9には存在しました.

$ podget --export_opml /tmp/podcast.opml
podget
 
Session file not found.  Creating podget.22189 .
 
Export serverlist to OPML file: /tmp/podcast.opml
 
Closing session and removing lock file.
$ head /tmp/podcast.opml
<?xml version="1.0" encoding="utf-8" ?>
<opml version="1.0">
<head/>
<body>
<outline text="tech"><outline text="電脳空間カウボーイズ" type="rss" xmlUrl="http://feeds.feedburner.com/weblogs/csc" /></outline>
<outline text="tech"><outline text="backspace.fm" type="rss" xmlUrl="http://feeds.backspace.fm/backspacefm" /></outline>
<outline text="science"><outline text="日立ハイテクプレゼンツ 大村正樹のサイエンスキッズ" type="rss" xmlUrl="http://www.joqr.co.jp/science-podcast/index.xml" /></outline>
<outline text="etc"><outline text="文化系トークラジオ Life" type="rss" xmlUrl="http://www.tbsradio.jp/life/rss.xml" /></outline>
<outline text="bike"><outline text="ミラクル・サイクル・ライフ" type="rss" xmlUrl="http://www.tbsradio.jp/cycle-r/index.xml" /></outline>
<outline text="anime"><outline text="そこあに" type="rss" xmlUrl="http://sokoani.com/feed" /></outline>

実行

とりあえず引数無しで実行することでPodcastが取得できます.

$ podget
-------------------------------------------------
Category: anime         Name: そこあに
Downloading feed index from http://sokoani.com/feed
2016-02-19 07:37:15 URL:http://sokoani.com/feed [673868] -> "-" [1]
 
Downloading 0_s413.mp3 from http://sokoani.com/podpress_trac/feed/9818/0/
 :
 :

Podcastは規定値では~/POD以下にカテゴリ/番組名/番組ファイルの形で保存されます.

$ find ~/POD -type f | tail -3
/home/mk/POD/etc/JUNK 伊集院光 深夜の馬鹿力/files_20160216.mp3
/home/mk/POD/etc/JUNK 伊集院光 深夜の馬鹿力/files_20160202.mp3
/home/mk/POD/etc/JUNK 伊集院光 深夜の馬鹿力/files_20160209.mp3

また,~/POD/*.m3uとステプレイリストも作成されます.これは実行単位で作られるのかな?

$ ls -l ~/POD/*.m3u
-rw-rw-r-- 1 mk mk  946  2月 19 07:14 /home/mk/POD/New-2016-02-19.m3u
-rw-rw-r-- 1 mk mk 1924  2月 19 07:50 /home/mk/POD/New-2016-02-19.r2.m3u

うまく動作するようなら-sオプションを付けてcronに登録してあげると良さそうです.以下の例では毎時3分にpodgetを実行しています.

$ crontab -e
$ crontab -l | tail -2
# get podcast
3 * * * *       podget -s

podracerはPodcastを番組関係なく実行日のディレクトリに保存されてPodcast番組を探したりするのに不便でしたがpodgetだとカテゴリと番組でディレクトリが分かれるので便利です.
しばらく併用してみようと思います.

絵文字を入力する-Mozc&emojione-picker-

Linux環境での絵文字入力方法です.新しい方法を知ったので紹介してみます.

Mozc利用

これまではこの方法を使っていました.Mozcの設定で「Unicode 6 絵文字変換」にチェックを付けると利用できるようになります.

20160216_23:02:52-2121

「えもじ」とか「ねこ」とか入力して変換出来ます.

20160217_07:02:28-3105

辞書に登録することも出来ます.

20160217_07:02:07-5247

emojione-picker for Ubuntu

今回知ったUbuntu向けの絵文字ピッカーです.実行するとタスクバーに常駐して入力したい絵文字を選んでクリックするとその絵文字がクリップボードにコピーされるのでクリップボード貼り付けで入力できます.

20160217_07:02:45-12768

チキンがクリップボードにコピーされたところ.

20160217_07:02:11-16960

いちいちメニューを辿るのは面倒ですが,Recentに最近使った絵文字が入るのでよく使うものはここからアクセスできます.

20160217_07:02:42-17641

Debian stretch testing への導入例

Ubuntu用ですがstretchにも入りました.ちなみにパッケージ化して導入しなくてもとりあえず動かすだけならgit cloneした後cd emojione-picker-ubuntu ; ./emojione-pickerとかでも動きました.

$ sudo apt install equivsequivs gir1.2-rsvg-2.0
$ git clone https://github.com/gentakojima/emojione-picker-ubuntu.git
$ cd emojione-picker-ubuntu
$ equivs-build debian_package.ctl
$ sudo dpkg -i emojione-picker_0.1_all.deb

という感じでLinux環境でも結構快適に絵文字が入力できるようになってきました.しかし絵文字は楽しいのですが環境によって見え方が大幅に変わるので意図したように伝わっているかとかが不安でもあります…….

絵文字を入力する-Mozc&emojione-picker-

Linux環境での絵文字入力方法です.新しい方法を知ったので紹介してみます.

Mozc利用

これまではこの方法を使っていました.Mozcの設定で「Unicode 6 絵文字変換」にチェックを付けると利用できるようになります.

20160216_23:02:52-2121

「えもじ」とか「ねこ」とか入力して変換出来ます.

20160217_07:02:28-3105

辞書に登録することも出来ます.

20160217_07:02:07-5247

emojione-picker for Ubuntu

今回知ったUbuntu向けの絵文字ピッカーです.実行するとタスクバーに常駐して入力したい絵文字を選んでクリックするとその絵文字がクリップボードにコピーされるのでクリップボード貼り付けで入力できます.

20160217_07:02:45-12768

チキンがクリップボードにコピーされたところ.

20160217_07:02:11-16960

いちいちメニューを辿るのは面倒ですが,Recentに最近使った絵文字が入るのでよく使うものはここからアクセスできます.

20160217_07:02:42-17641

Debian stretch testing への導入例

Ubuntu用ですがstretchにも入りました.ちなみにパッケージ化して導入しなくてもとりあえず動かすだけならgit cloneした後cd emojione-picker-ubuntu ; ./emojione-pickerとかでも動きました.

$ sudo apt install equivsequivs gir1.2-rsvg-2.0
$ git clone https://github.com/gentakojima/emojione-picker-ubuntu.git
$ cd emojione-picker-ubuntu
$ equivs-build debian_package.ctl
$ sudo dpkg -i emojione-picker_0.1_all.deb

という感じでLinux環境でも結構快適に絵文字が入力できるようになってきました.しかし絵文字は楽しいのですが環境によって見え方が大幅に変わるので意図したように伝わっているかとかが不安でもあります…….

GNU Coreutils 8.25でlsの出力が変わったのを試してみる

DebuanのMLで知ったのですが,Coreutils 8.25lsの出力結果が変わっています.

この変更はlsコマンドを使ったscriptなどが影響を受けそうと思ったのですが端末でのみの変更のようで一安心.
Debian stretch testingでちょっと試しに動かしてみました.
Debian jessie/Ubuntu 14.04以降も同じ手順で行けると思います.

開発環境の導入

$ sudo apt install build-essential
$ sudo apt build-dep coreutils

Coreutils 8.25の入手と署名確認

$ wget ftp://ftp.gnu.org/gnu/coreutils/coreutils-8.25.tar.xz ftp://ftp.gnu.org/gnu/coreutils/coreutils-8.25.tar.xz.sig
$ gpg --verify coreutils-8.25.tar.xz.sig
gpg: 署名されたデータが'coreutils-8.25.tar.xz'にあると想定します
gpg: 2016年01月20日 20時17分46秒 JSTにRSA鍵ID 306037D9で施された署名
gpg: "Pádraig Brady <P@draigBrady.com>"からの正しい署名
gpg:                 別名"Pádraig Brady <pixelbeat@gnu.org>"
gpg: *警告*: この鍵は信用できる署名で証明されていません!
gpg:       この署名が所有者のものかどうかの検証手段がありません。
主鍵フィンガー・プリント: 6C37 DC12 121A 5006 BC1D  B804 DF6F D971 3060 37D9

展開とビルド

$ tar xf coreutils-8.25.tar.xz
$ cd coreutils-8.25
$ ./configure --prefix=$HOME/usr/local
$ make

端末でのlsの動作比較

今パスの通っているのは8.24で,src/ls8.25

$ ls --version
ls (GNU coreutils) 8.24
Copyright (C) 2015 Free Software Foundation, Inc.
ライセンス GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
 
作者 Richard M. Stallman および David MacKenzie。
$ src/ls --version
ls (GNU coreutils) 8.25
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
 
Written by Richard M. Stallman and David MacKenzie.

スペースの含まれたファイルを作成してlsを実行すると8.25のlsでは'で括られる.

$ touch /tmp/hoge\ fuga
$ ls /tmp/hoge\ fuga
/tmp/hoge fuga
$ src/ls /tmp/hoge\ fuga
'/tmp/hoge fuga'

日本語は大丈夫だが,エスケープの必要な文字も括られる.

$ touch /tmp/日本語 /tmp/エスケープの必要な記号\?
$ src/ls /tmp/日本語 /tmp/他の記号\?
'/tmp/他の記号?'  /tmp/日本語

パイプでの動作確認

パイプを通るとこれまでどおりの動作

$ src/ls /tmp/hoge\ fuga | cat
/tmp/hoge fuga

なので,xargsなどで処理したい場合はこれまでどおり

$ src/ls /tmp/hoge\ fuga | xargs cat
cat: /tmp/hoge: そのようなファイルやディレクトリはありません
cat: fuga: そのようなファイルやディレクトリはありません
$ src/ls /tmp/hoge\ fuga | xargs -I{} cat "{}"

回避方法x3

$ src/ls --quoting-style=literal /tmp/hoge\ fuga /tmp/エスケープの必要な記号\?
/tmp/hoge fuga  /tmp/エスケープの必要な記号?
$ src/ls -N /tmp/hoge\ fuga /tmp/エスケープの必要な記号\?
/tmp/hoge fuga  /tmp/エスケープの必要な記号?
$ QUOTING_STYLE=literal src/ls /tmp/hoge\ fuga /tmp/エスケープの必要な記号\?
/tmp/hoge fuga  /tmp/エスケープの必要な記号?

ということでとりあえずこれまでと同じ動作をさせたい場合はQUOTING_STYLE=literalを設定したりls -Naliasを設定しておくといいみたいです.

$ echo 'export QUOTING_STYLE=literal' >> ~/.bashrc

or

$ echo "alias ls='ls -N'" >> ~/.bashrc~/.bashrc

#ところでCoreutils 8.25でまたコマンドが一つ増えていました.今回は覚えやすいけど

** New commands

base32 is added to complement the existing base64 command,
and encodes and decodes printable text as per RFC 4648.

<追記>

DebianではSeverity: serious(重要度:深刻)となってsidの8.25-2no_ls_quoting.patchが入ってrevertされたようです.

$ bin/ls --version|head -1
ls (GNU coreutils) 8.25
$ bin/ls /tmp/hoge\ fuga 
/tmp/hoge fuga
$ cat patches/no_ls_quoting.patch
Description: revert inconsistent ls quoting
 This is a revert of upstream commit 109b9220cead6e979d22d16327c4d9f8350431cc.
 Info changed to reflect current upstream intentions.
 
Bug-Debian: https://bugs.debian.org/813164
 
--- coreutils-8.25.orig/NEWS
+++ coreutils-8.25/NEWS
@@ -71,9 +71,6 @@ GNU coreutils NEWS
   df now prefers sources towards the root of a device when
   eliding duplicate bind mounted entries.
 
-  ls now quotes file names unambiguously and appropriate for use in a shell,
-  when outputting to a terminal.
-
   join, sort, uniq with --zero-terminated, now treat '\n' as a field delimiter.
 
 ** Improvements
--- coreutils-8.25.orig/doc/coreutils.texi
+++ coreutils-8.25/doc/coreutils.texi
@@ -7750,8 +7750,8 @@ this"} in the default C locale.  This lo
 
 You can specify the default value of the @option{--quoting-style} option
 with the environment variable @env{QUOTING_STYLE}@.  If that environment
-variable is not set, the default value is @samp{shell-escape} when the
-output is a terminal, and @samp{literal} otherwise.
+variable is not set, the default value is @samp{literal}, but this
+default may change to @samp{shell-escape} in a future version of this package.
 
 @item --show-control-chars
 @opindex --show-control-chars
--- coreutils-8.25.orig/src/ls.c
+++ coreutils-8.25/src/ls.c
@@ -1581,7 +1581,6 @@ decode_switches (int argc, char **argv)
       if (isatty (STDOUT_FILENO))
         {
           format = many_per_line;
-          set_quoting_style (NULL, shell_escape_quoting_style);
           /* See description of qmark_funny_chars, above.  */
           qmark_funny_chars = true;
         }

</追記>

gdm3とlightdmでログイン時にユーザを表示しないようにする

gdm3

先ずはgdm3から.
環境は,Debian stretch testing gdm3 3.18.0-2です.

/etc/gdm3/greeter.dconf-defaultsを編集して,[org/gnome/login-screen]セクションのdisable-user-list=trueのコメントを外して有効にする.

[org/gnome/login-screen]
disable-user-list=true

その後gdm3を再起動.

$ sudo systemctl stop gdm
$ sudo systemctl start gdm

#初め/etc/gdm3/greeter.dconf-defaultsはテンプレートなのかと思って/etc/gdm3/greeter.dconfにコピーして編集して反映されないなーとやっていましたorz

LightDM

LightDMの場合.
環境は,Debian stretch testing lightdm 1.16.6-1です.

/etc/lightdm/lightdm.conf[LightDM]セクションのgreeter-hide-users=trueのコメントを外して有効にする.

greeter-hide-users=true

--show-configオプションで設定が確認できます.

$ /usr/sbin/lightdm --show-config
[Seat:*]
A  greeter-session=lightdm-greeter
A  greeter-hide-users=true
A  session-wrapper=/etc/X11/Xsession
B  user-session=kde-plasma-kf5
[LightDM]
C  greeter-hide-users=True
C  allow-guest=False
[XDMCPServer]
C  enabled=true
Sources:
A  /usr/share/lightdm/lightdm.conf.d/01_debian.conf
B  /usr/share/lightdm/lightdm.conf.d/40-kde-plasma-kf5.conf
C  /etc/lightdm/lightdm.conf

その後LightDMの再起動.

$ sudo systemctl stop lightdm
$ sudo systemctl start lightdm

ディスプレイマネージャの切り替え

dpkg-reconfigureに導入済みのディスプレイマネージャのパッケージ名(どれでも)を付けて起動すると,導入済みのディプレイマネージャから選択できます.

$ sudo dpkg-reconfigure gdm3
┌─────────────────────────────────────────────────────────────────────┤ gdm3 を設定しています ├─────────────────────────────────────────────────────────────────────┐  
│ ディスプレイマネージャとは、X Window System 上でのグラフィカルなログイン機能を提供するものです。                                                                  │  
│                                                                                                                                                                   │  
│ ひとつの X サーバを管理できるのはひとつのディスプレイマネージャだけですが、ディスプレイマネージャパッケージが複数インストールされています。どのディスプレイマネ   │  
│ ージャをデフォルトで起動させるか選択して下さい。                                                                                                                  │  
│                                                                                                                                                                   │  
│ 異なるサーバを担当するように設定すれば、複数のディスプレイサーバは同時に動作できます。そのようにするには、/etc/init.d にある各ディスプレイマネージャの初期化スク  │  
│ リプトを編集し、デフォルトディスプレイマネージャのチェックを無効にして下さい。                                                                                    │  
│                                                                                                                                                                   │  
│ デフォルトのディスプレイマネージャ:                                                                                                                               │  
│                                                                                                                                                                   │  
│                                                                              gdm3                                                                                 │  
│                                                                              lightdm                                                                              │  
│                                                                              sddm                                                                                 │  
│                                                                                                                                                                   │  
│                                                                                                                                                                   │  
│                                                                              <了解>                                                                               │  
│                                                                                                                                                                   │  
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘  

色温度を自動的に変更して健康に気を使う(ブルーライトカット)

backspace.fmでドリキンさんがf.luxがいいと言っているのを聞いて以前Linux環境でブルーライトカット系のアプリを少し試したのを思い出しました.

その時はdebianでf.luxは自分でリポジトリを登録するのが面倒でパッケージの用意されているgnome-shell-extension-redshiftredshiftを試してみたのでした.f.luxインスパイアらしいし.
これらはf.luxと同じようにネットワーク情報から位置情報を取得し,端末の場所の太陽の位置により色温度を変化させるアプリケーションです.夜は色温度を低くしてブルーライトを軽減させます.これによりブルーライトを睡眠前に受ける量が減って寝つきやすくなったり睡眠の質が良くなるかもという効果を期待しています.
しかし,gnome-shell-extension-redshiftはうまく有効にならず,redshiftは位置情報の取得に失敗して手動で動作させていたのでした.

今回もdebian環境でredshift-gtkを試してみました.これは実体はredshiftでタスクトレイに常駐するものです.一時的にon/offすることも簡単に出来るので便利です.

実行するとタスクトレイに電球と月のアイコンが表示されます.クリックすると以下のようなメーニューが.
20160211_06:02:18-13459

画像編集などで一時的に機能を切りたい場合などサスペンドする機能もあります.
20160211_06:02:31-13554

インフォメーションの表示.朝6時頃なので色温度がだんだん高くなっていくところです.
20160211_06:02:28-4511

設定ファイルの作成

規定値で動作させてもだいたい問題ないのですが,カスタマイズしたかったり位置情報が誤った場所のものになっている場合など設定を変更したくなることがあります.
redshiftをコマンドで実行する場合はオプションが指定できますが,redshift-gtkの場合は設定ファイルで指定可能です.
場所は~/.config/redshift.confです.;以降はコメントとして扱われるようです.

メインとなる[redshift]セクションの説明です.

  • temp-day : 昼間の色温度,規定値は5500
  • temp-night : 夜間の色温度,規定値は3700
  • transition : スムーズな遷移の無効有効の設定(0 or 1)
  • brightness-day : 昼間のブライトネス設定(0.1~1.0)
  • brightness-night : 夜間のブライトネス設定(0.1~1.0)
  • gamma : ガンマ値の設定(0.1~10.0)
  • adjustment-method : 調整方法の選択
$ redshift -m list
Available adjustment methods:
  drm
  randr
  vidmode
  dummy
 
Specify colon-separated options with `-m METHOD:OPTIONS'.
Try `-m METHOD:help' for help.
  • location-provider : ロケーションプロバイダの指定.listオプションで確認できます.現在はgeoclue2とmanualが選べるようです.
$ redshift -l list
Available location providers:
  geoclue2
  manual
 
Specify colon-separated options with`-l PROVIDER:OPTIONS'.
Try `-l PROVIDER:help' for help.

adjustment-methodを指定した場合それぞれのセクションでオプションを指定可能です.
内容は$ redshift -m randr:helpのようにメソッド名:helpで確認できます.

[redshift]
 :
adjustment-method=randr
 :
[randr]
screen=1

location-providermanualにした場合[manual]セクションで緯度経度を指定します.度.分のみで秒まで指定するとエラーとなります.
以下は鹿児島県の場合です.

[manual]
lat=31.33
lon=130.33

ということで今こんな感じで使っています.

; Global settings for redshift
[redshift]
; Set the day and night screen temperatures
temp-day=5700
temp-night=3600
; Enable/Disable a smooth transition between day and night
; 0 will cause a direct change from day to night screen temperature.
; 1 will gradually increase or decrease the screen temperature
transition=1
; Set the screen brightness. Default is 1.0
;brightness=0.9
; It is also possible to use different settings for day and night since version 1.8.
brightness-day=0.9
brightness-night=0.7
; Set the screen gamma (for all colors, or each color channel individually)
gamma=0.8
;gamma=0.8:0.7:0.8
; Set the location-provider: 'geoclue2', 'manual'
; type 'redshift -l list' to see possible values
; The location provider settings are in a different section.
location-provider=manual
 
; Set the adjustment-method: 'drm', 'randr', 'vidmode', 'dummy'
; type 'redshift -m list' to see all possible values
; The adjustment method settings are in a different section.
adjustment-method=randr
 
; Configuration of the adjustment-method
; type 'redshift -m METHOD:help' to see the settings
; ex: 'redshift -m randr:help'
; In this example, randr is configured to adjust screen 0.
; Note that the numbering starts from 0, so this is actually the second screen.
[randr]
screen=0
 
; Configuration of the location-provider:
; type 'redshift -l PROVIDER:help' to see the settings
; e.g. 'redshift -l manual:help'
[manual]
; kagoshima, japan
lat=31.33
lon=130.33

問題点?

redshiftを動かしているとブライトネスもこれで管理されます.手動で設定してもすぐにredshiftの設定に戻ります.バッテリー駆動中でブライトネスを下げてバッテリーの持ちを良くしようというような場合は困ります.とりあえずredshiftもブライトネスも手動設定して回避しています.

redshift-gtkを終了した状態で手動設定

$ redshift -O 3500
$ xrandr --output LVDS1 --brightness 0.3

それと夜ふかしさんのためにブルーライトカットの時間をずらす機能はないかなと思ったのですが見当たりませんでした.これは位置情報をmanualで設定して時差のある場所を設定するようにしたら実現できそうです.

コマンドで添付ファイル付きメールを送る2つの方法

Google+でmailコマンドで添付ファイル付きメールを送ろうとしている方の投稿のコメントにbase64でデコードして送るscriptを使ってますとか書いたのですが,これperl4でcgi全盛な大昔からやってる手法なので楽なものがあるのではと思い探してみました.

Debian stretch testingのs-nailを使う

Debian stretch testing/sid ではmailコマンドがbsd-mailxからs-nailに変わって添付ファイルオプションがあるようです.

 -a file     Attach the given file to the message.  The same filename conventions as described in the section COMMANDS apply: shell word expansion is
             restricted to the tilde ‘~’ and variables.  Shall file not be accessible but contain a ‘=’ character, then anything after the ‘=’ is assumed to
             specify the input character set and anything before ‘=’ the filename: this is the only option to specify the input character set (and don't per‐
             form any character set conversion) for text attachments from the command line, not using the ~@ tilde escape command.

こんな感じで使えました.

$ echo 'attach test(binary)' | mail -s "attach test mail" -a ./text.xz matoken@gmail.com

#はじめ.zipを送ろうとしてgmailサーバに弾かれました.そういえばそうだった……
##sendmail: 552 5.7.0 content and attachment content guidelines. xu1sm1469539pab.31 - gsmtp

普通にメール送るのに加えて-aオプションでファイルを指定する感じです.
オプションでSMTPサーバの指定も出来るようなのでMTAの設定をしていないような場合でも単体で使えそうです.

Debian jessieでbiabamを使う

s-nailはstretch testingからでjessieには入っていないようです.代わりに入っているのはbsd-mailxです.manをちょっと見た感じでは添付ファイルの扱いは載っていなさそう.でもきっと便利な何かがあるのでは?とapt-cache search mail attachとかして探してみるとbiabamというbash script製のものを発見.小さいし良さそうと試してみました.

biabam – bash attachment mailer

こんな感じで使えました.

$ sudo apt install biabam
$ echo 'attach test' | biabam ./test.xz -s "attach test from jessie" matoken@gmail.com

ちなみにmailコマンドで添付ファイルの方法を検索すると大抵mutt使う例が出てきますが,muttを既に設定済みの人でないと敷居が高いと思います.そういう場合に今回の方法はいいのではないかと思います.

しかし恐らく多国言語対応はして居なさそうなので日本語をSubjectやBODYに使う場合は素直にScriptを書いたほうがいいかもしれません…….
定形なら適当なMUAでメールのテンプレートファイルを作っておいて流し込んでmailコマンドに投げるようにしてもいいですね.




Tailsの導入にtails-installパッケージが便利

手元のUSBメモリに導入してあるTailsを最新にしようと思い立ちダウンロードしつつ導入ページを見てみると新しくなっていました.

これまではisoファイルを入手した後USBメモリその1に導入.その後USBメモリその1から起動したTailsから運用したいUSBメモリその2に導入する必要がありました.
(USBメモリその1はカスタマイズなどが出来なかったはず)

次のページがその方法の解説ページです.

しかし,DebianとUbuntu向けにインストーラが用意されていました.これを利用するとインストールのためのUSBメモリが必要なくisoファイルからUSBメモリに導入するだけでOKになっていました.

これは便利と早速試してみました.

Tailsの入手

次のページから入手出来ます.私はbittorrent経由で入手しました.ダウンロードの完了に1時間と少し掛かりました.

ダウンロードが済んだら署名確認をします.
公開鍵を持っていない場合はダウンロードページの下のTails signing keyという画像から入手してインポートします.

$ wget -qO - https://tails.boum.org/tails-signing.key | gpg --import /dev/stdin
gpg: 鍵58ACD84F: 公開鍵"Tails developers (offline long-term identity key) <tails@boum.org>"をインポートしました
gpg:           処理数の合計: 1
gpg:             インポート: 1  (RSA: 1)
gpg: 最小の「ある程度の信用」3、最小の「全面的信用」1、PGP信用モデル
gpg: 深さ: 0  有効性:  15  署名:  53  信用: 0-, 0q, 0n, 0m, 0f, 15u
gpg: 深さ: 1  有効性:  53  署名:  60  信用: 53-, 0q, 0n, 0m, 0f, 0u
gpg: 次回の信用データベース検査は、2016-02-19です

その後署名確認をします.

$ gpg --verify tails-i386-2.0.iso.sig
gpg: 署名されたデータが'tails-i386-2.0.iso'にあると想定します
gpg: 2016年01月26日 09時07分15秒 JSTにRSA鍵ID 752A3DB6で施された署名
gpg: "Tails developers (offline long-term identity key) <tails@boum.org>"からの正しい署名
gpg:                 別名"Tails developers <tails@boum.org>"
gpg: *警告*: この鍵は信用できる署名で証明されていません!
gpg:       この署名が所有者のものかどうかの検証手段がありません。
主鍵フィンガー・プリント: A490 D0F4 D311 A415 3E2B  B7CA DBB8 02B2 58AC D84F
副鍵フィンガー・プリント: BA2C 222F 44AC 00ED 9899  3893 98FE C6BC 752A 3DB6

tails-installerの導入

tails-installerパッケージを導入します.tails-installerパッケージはDebianではjessie-backports以降に用意されています.

jessieでbackportsを設定していない人は次のページを参考に設定して下さい.

今回はstretch(testing)なのでパッケージの導入だけです.

$ sudo apt install tails-installer

tails-installertails-installerを使ったTailsの導入

メニューからやコマンドラインからtails-installer-launcherを実行します.ちなみにawesome wm環境だと認証がうまく動かないようです.

<脱線>

以下のコマンドの実行に問題がありました: `/usr/bin/pkexec /usr/bin/syslinux  -d syslinux /dev/sdb1`。
詳細なエラーログは  '/tmp/tails-installer-ddjZmh' に書かれています。
Tails installation failed!
以下のコマンドの実行に問題がありました: `/usr/bin/pkexec /usr/bin/syslinux  -d syslinux /dev/sdb1`。
詳細なエラーログは  '/tmp/tails-installer-ddjZmh' に書かれています。

このログを見ると以下のようなエラーが記録されていました.syslinux実行時に/dev/ttyが見つからないと言っているようです.

/usr/bin/pkexec /usr/bin/syslinux  -d syslinux /dev/sdb1
Error creating textual authentication agent: Error opening current controlling terminal for the process (`/dev/tty'): No such device or address

端末から実行すると認証が走りました.多分上のエラーはこの認証を呼ぼうとしてどこに呼べばいいのか解らなかったんでしょうね.

$ LANG=C tails-installer-launcher
    :
==== AUTHENTICATING FOR org.freedesktop.policykit.exec ===
Authentication is needed to run `/usr/bin/syslinux' as the super user
Authenticating as: KenichiroMATOHARA,,, (mk)
Password:
==== AUTHENTICATION FAILED ===

しかし3回ほど試しましたがここの認証も正しいパスワードを入力しても失敗してしまうよう…….

</脱線>

とりあえずpolicykitのちゃんと動いているGnomeなどの環境では問題ない&policykitが動かない場合は`gksudo`経由で実行すればOKです.

$ gksudo tails-installer-launcher

InstallとUpgradeが選択できます.Installを選択した場合は新規インストールで既存のデータは消されるので注意が必要です.Upgradeを選択すると既に持っているTailsのメディアのアップグレードが出来ます.

20160209_05:02:03-18344

署名確認をしたisoファイルと導入先のデバイス(USBメモリ等)を指定してInstall Tailsを選択します.

20160209_05:02:22-18509

確認画面が出て,OKボタンを押すと初期化や展開が始まります.しばらく待ちましょう.

20160209_05:02:28-18561

以下の画面が表示されたら完了です.

20160209_06:02:51-24618

UNetbootin並にお手軽です.Debian/UbuntuとTailsを利用している方におすすめです :)
#そういえばUNetbootinはjessie以降から居なくなってる. > Debian Package Tracking System – unetbootin






Debian の Steam が起動しなくなったので調べる

Debian stretch testing amd64 で steam:i386 パッケージで導入した Steam が起動しなくなっていました.

端末で直に叩くとこんな感じで怒られていました.

$ steam
find: The relative path '~/usr/local/bin' is included in the PATH environment variable, which is insecure in combination with the -execdir action of find.  Please remove that entry from $PATH

PATH から ~/usr/local/bin を抜くとOK
PATH を /home/user/usr/local/bin としてもOK
てことで ~/.profile の ~ を $HOME に書き換えました.

- PATH="~/usr/local/bin:$PATH"
+ PATH="$HOME/usr/local/bin:$PATH"

とりあえずこれで動くようになりました.

Steam では最近は Unturned とかで遊んでいます.最近は Linux で動くゲームも増えて嬉しいです :)

CLI な podcast aggregator/downloader な podracer を試してみる

podcast aggregator に rhythmbox を利用しているのですが,たまにファイルが存在するのに何度やってもダウンロードに失敗したり NotePC で動かしているので容量の問題で古いのをファイルサーバに持って行ったりといった処理が面倒です.
CIL で動くものがあればファイルサーバで入手するようにして新しい物だけ手元に or ファイルサーバ経由で視聴するようにしら便利かもということで CLI で動く podcast aggregator が無いか探してみました.

$ apt-cache search podcast aggregator
gpodder - podcast client and feed aggregator
podracer - podcast aggregator/downloader

gpodder は GUI と CLI のセットで,podracer は CLI のみのようです.今回は podracer を試してみます.

導入

導入は apt 一発です.

$ sudo apt install podracer

設定ファイルの用意

~/.podracer/subscriptions というファイルに入手したいフィードを1フィード1行で書いておきます.# 行はコメントになるようです.

# 電脳空間カウボーイズ
http://feeds.feedburner.com/weblogs/csc
# backspace.fm
http://feeds.backspace.fm/backspacefm

実行

podracer コマンドを実行すると,~/.podracer/subscriptions からpodcast をダウンドードしてくれます.ダウンロードが完了すると自動的に終了します.

$ podracer

初回実行時には過去のものも入手するので時間が掛かるでしょう.特に画面には何も表示されないのでログファイル( ~/.podracer/podcast.log ) を確認するといいと思います.

$ tail -f ~/.podracer/podcast.log

取得した podcast は ~/podcasts 以下の日付ファイルの下に保存されます.この日付は実行日時です.

$ ls ~/podcasts
2016-01-27  2016-01-28
$ ls -lA ~/podcasts/2016-01-28
合計 59408
-rw-r--r-- 1 mk mk        0  1月 28 14:03 2016-01-28-podcasts.m3u
-rw-r--r-- 1 mk mk 60833627  1月 28 14:02 jlEV91AshKrq
$ file  ~/podcasts/2016-01-28/*
/home/mk/podcasts/2016-01-28/2016-01-28-podcasts.m3u: empty
/home/mk/podcasts/2016-01-28/jlEV91AshKrq:            Audio file with ID3 version 2.3.0

後は各種プレイヤーで再生できます.

$ mplayer ~/podcasts/2016-01-28/jlEV91AshKrq

ファイル名は podcast 提供者の物のままで同じディレクトリに格納されてしまうので名前が衝突したら多分新しい方で上書きされてしまいます.それとこのままではどのファイルがどの podcast なのかとかわからないですね.オプションも特に無いようなので沢山の podcast を保管しようという用途で使うのには向いていないかもしれません.
毎日実行して今日の分をまとめて再生して消してというように使う感じなのかもしれません.

追記)プレイリストの不具合?

podracer 実行時に 2016-01-28-podcasts.m3u のようなプレイリストが作られますが,mp3/ogg/m4a/m4b 以外の拡張子は登録されません.こんな感じで作り直すと良さそう.

$ ls -1A ~/podcasts/2016-01-28 | grep -v \.m3u$ > ~/podcasts/2016-01-28/2016-01-28-podcasts.m3u

この方がいいかな

$ ls -1A ~/podcasts/`date +%F` | grep -v \.m3u$ > ~/podcasts/`date +%F`/`date +%F`-podcasts.m3u

podracer 自体を修正してもいいかも.雑いけどこんなとか.
これだとサムネイル画像なども含まれてしまう.

$ diff -u /usr/bin/podracer podracer
--- /usr/bin/podracer   2015-07-04 22:39:26.000000000 +0900
+++ podracer    2016-01-28 18:34:40.317391930 +0900
@@ -415,10 +415,7 @@
                then
                (
                cd "$poddir"
-               find . -name \*.mp3 > "$m3u"
-               find . -name \*.ogg  >> "$m3u"
-               find . -name \*.m4a  >> "$m3u"
-               find . -name \*.m4b  >> "$m3u"
+               find . -name \* -type f | grep -v "$m3u" > "$m3u"
                )
        fi
 fi

追記2)
上の修正だとサムネイル画像なども登録されてしまう.
以下はその他のファイルを file command で調べて audio という文字列が入っていたら登録するもの.

$ diff -u /usr/bin/podracer ./podracer
--- /usr/bin/podracer   2015-07-04 22:39:26.000000000 +0900
+++ ./podracer  2016-01-28 19:12:31.980446668 +0900
@@ -419,6 +419,7 @@
                find . -name \*.ogg  >> "$m3u"
                find . -name \*.m4a  >> "$m3u"
                find . -name \*.m4b  >> "$m3u"
+               find . | egrep -v "\.mp3$|\.ogg$|\.m4a$|\.m4b$" | xargs file | grep -i audio | cut -f1 -d: >> "$m3u"
                )
        fi
 fi