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

今のところ満足 :-)

Awesome wm でボリュームコントロール

IMGP0223_変更済み

Gnome Shell や XFce4 などでは NotePC の音量コントロールボタンで音量のUp/Down 及びミュートが操作出来ましたが, Awesome ではそのままでは動作しないようです.ということで設定してみました.

(以下の時の設定では unmute がうまく行っていなかった & 解りやすく修正.)

キーコードを調べる

まずはボタンのキーコードを調べました.xev コマンドを実行しながら該当ボタンを押して調べます.手元のマシンでは以下のようになりました.

ThinkPad X201s のボリュームキー情報(xev で確認)

  • VolUp
    KeyRelease event, serial 33, synthetic NO, window 0x1800001,
      root 0x98, subw 0x0, time 74266491, (715,471), root:(717,492),
      state 0x0, keycode 123 (keysym 0x1008ff13, XF86AudioRaiseVolume), same_screen YES,
      XLookupString gives 0 bytes:
      XFilterEvent returns: False
  • VolDown
    KeyRelease event, serial 33, synthetic NO, window 0x1800001,
      root 0x98, subw 0x0, time 74268735, (715,471), root:(717,492),
      state 0x0, keycode 122 (keysym 0x1008ff11, XF86AudioLowerVolume), same_screen YES,
      XLookupString gives 0 bytes:
      XFilterEvent returns: False
  • ミュート
    KeyPress event, serial 30, synthetic NO, window 0x3e00001,
      root 0x98, subw 0x0, time 107269062, (0,480), root:(212,630),
      state 0x0, keycode 121 (keysym 0x1008ff12, XF86AudioMute), same_screen YES,
      XLookupString gives 0 bytes:
      XmbLookupString gives 0 bytes:
      XFilterEvent returns: False

ということでこうなりました.

  • ミュートボタン -> XF86AudioMute
  • 音量Upボタン -> XF86AudioRaiseVolume
  • 音量Downボタン -> XF86AudioLowerVolume

音量の操作コマンドを調べる

alsa の操作をコマンドで実行できる amixer で操作するサウンドカードなどを確認します.amixer でサウンドカードを確認して,amixer -c 0 などとしてサウンドカードの内訳を確認したり出来ます.-c 0 は0番目のカードという意味になります.2枚目のカードは,-c 1 というオプションで指定できます.

今回は sound card 0 の Master を操作します.以下のコマンドで情報の表示や操作ができます.

  • sound card 0 の Master の状態確認

    % amixer -c 0 get Master
    Simple mixer control 'Master',0
    Capabilities: pvolume pvolume-joined pswitch pswitch-joined
    Playback channels: Mono
    Limits: Playback 0 - 74
    Mono: Playback 58 [78%] [-16.00dB] [off]
  • sound card 0 の Master を無音に

    % amixer -c 0 set Master mute  
    Simple mixer control 'Master',0
    Capabilities: pvolume pvolume-joined pswitch pswitch-joined
    Playback channels: Mono
    Limits: Playback 0 - 74
    Mono: Playback 58 [78%] [-16.00dB] [off]
  • sound card 0 の Master の音を有効に

    % amixer -c 0 set Master unmute
    Simple mixer control 'Master',0
    Capabilities: pvolume pvolume-joined pswitch pswitch-joined
    Playback channels: Mono
    Limits: Playback 0 - 74
    Mono: Playback 58 [78%] [-16.00dB] [on]

Master の unmute だけだとスピーカーがミュートになったままなのでスピーカーも unmute します.

  • sound card 0 の Speaker の音を有効に

    % amixer -c 0 set Speaker unmute
    Simple mixer control 'Speaker',0
    Capabilities: pvolume pswitch
    Playback channels: Front Left - Front Right
    Limits: Playback 0 - 74
    Mono:
    Front Left: Playback 74 [100%] [0.00dB] [on]
    Front Right: Playback 74 [100%] [0.00dB] [on]
  • sound card 0 の Master の音量を 2dB 上げる

    % amixer -c 0 set Master 2dB+
    Simple mixer control 'Master',0
    Capabilities: pvolume pvolume-joined pswitch pswitch-joined
    Playback channels: Mono
    Limits: Playback 0 - 74
    Mono: Playback 60 [81%] [-14.00dB] [off]
  • sound card 0 の Master の音量を 2dB 下げる

    % amixer -c 0 set Master 2dB-
    Simple mixer control 'Master',0
    Capabilities: pvolume pvolume-joined pswitch pswitch-joined
    Playback channels: Mono
    Limits: Playback 0 - 74
    Mono: Playback 58 [78%] [-16.00dB] [off]

Script にする

~/script/awesome-audio.bash という名前のscript にしました.引数にキーコードを渡して実行すると,ミュートボタンを押すとミュート状態ならミュートを解除,そうでないならミュートに,音量ボタンで 2dB ずつUp/Down するようになっています.
それだけだと状態がわかりにくかったので,notify-send コマンドでアイコンとメッセージを表示するようにしました.

メッセージの表示は awesome 的には naughty.notify で行うのが正しいと思うのですが,使い方がよく解らずorz
まあ notify-send なら awesome 以外の環境でも動くのでいいかなと.

#!/bin/bash 
 
case "$1" in
  "XF86AudioMute" )
    MUTE=`amixer -c 0 get Master|tail -1|cut -d '[' -f 4|sed s/\]//`
    if [ $MUTE = "on" ] ; then
      amixer -q -c 0 set Master mute
      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
      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 '/usr/share/icons/ContrastHigh/scalable/status/audio-volume-medium.svg' Vol
  ;;
  "XF86AudioLowerVolume" )
    amixer -c 0 set Master 2dB- | tail -1 | cut -d '[' -f 2 | sed s/\]// | xargs notify-send -u low -t 500 -i '/usr/share/icons/ContrastHigh/scalable/status/audio-volume-medium.svg' Vol
  ;;
esac
 
amixer -c 0 get Master | tail -1 | cut -d '[' -f 2 | sed s/\]//

以下のように実行して動作確認しておきます.

% ~/script/awesome-audio.bash XF86AudioMute
🔊☓
mute!
70%
% ~/script/awesome-audio.bash XF86AudioMute
🔊
unmute!
70%
% ~/script/awesome-audio.bash XF86AudioRaiseVolume
73%
% ~/script/awesome-audio.bash XF86AudioLowerVolume
70%

notify-send でデスクトップには以下のような通知が表示されます.

20150903_03:09:19-832020150903_03:09:04-964020150903_03:09:05-1036220150903_03:09:24-10606

awesome の設定を行う

音量コントロールボタンで script を呼ぶように awesome の設定ファイル ~/.config/awesome/rc.lua に以下の設定を追記します.追記場所は `-- Standard program の後ろ辺りでok です.

    -- Audio Controle 
    awful.key({         }, "XF86AudioMute"function () awful.util.spawn("/home/mk/script/awesome-audio.bash XF86AudioMute",false)       end),
    awful.key({         }, "XF86AudioRaiseVolume"function () awful.util.spawn("/home/mk/script/awesome-audio.bash XF86AudioRaiseVolume",falseend),
    awful.key({         }, "XF86AudioLowerVolume"function () awful.util.spawn("/home/mk/script/awesome-audio.bash XF86AudioLowerVolume",falseend),

ここまで設定できたら awesome を restart します.

>
メニュー -> awesome -> restart

音量コントロールボタンで操作ができるようになったら出来上がりです :)

ownCloud のデスクトップクライアントの最新版(2.0)を試す


  • download.owncloud.com/download/changelog-client
    Release 2.0.0
    Release August 25th 2015
    * Add support for multiple accounts (#3084)
    * Do not sync down new big folders from server without users consent (#3148)
    * Integrate Selective Sync into the default UI
    * OS X: Support native finder integration for 10.10 Yosemite (#2340)
    * Fix situation where client would not reconnect after timeout (#2321)
    * Use SI units for the file sizes
    * Improve progress reporting during sync (better estimations, show all files, show all bandwidth)
    * Windows: Support paths >255 characters (#57) by using Windows API instead of POSIX API
    * Windows, OS X: Allow to not sync hidden files (#2086)
    * OS X: Show file name in UI if file has invalid UTF-8 in file name
    * Sharing: Make use of Capability API (#3439)
    * Sharing: Do not allow sharing the root folder (#3495)
    * Sharing: Show thumbnail
    * Client Updater: Check for updates periodically, not only once per run (#3044)
    * Windows: Remove misleading option to remove sync data (#3461)
    * Windows: Do not provoke AD account locking if password changes (#2186)
    * Windows: Fix installer when installing unprivileged (#2616, #2568)
    * Quota: Only refresh from server when UI is shown
    * SSL Button: Show more information
    * owncloudcmd: Fix --httpproxy (#3465)
    * System proxy: Ask user for credentials if needed
    * Several fixes and performance improvements in the sync engine
    * Network: Try to use SSL session tickets/identifiers. Check the SSL button to see if they are used.
    * Bandwidth Throttling: Provide automatic limit setting for downloads (#3084)
    * Systray: Workaround for issue with Qt 5.5.0 #3656

ということでマルチアカウント対応とか便利そう!ってことで試してみました.
何時もはディストリビューションで提供されているパッケージを利用しています.今回導入は ownCloud 自体が公開している OBS のリポジトリから apt で導入しました.

クライアントの 一般 タブの アカウントを追加 ボタンで普通に追加できます.
20150828_18:08:02-17719

同期複数アカウントの場合は明示的にローカルフォルダを指定しないといけません.
20150829_19:08:11-22354

同期フォルダが選択できるようになってるのも便利ですね.これまでは除外フォルダとして指定していました.
20150829_19:08:55-22932

自宅サーバで低速だけど大容量のサーバ.VPS で高速な出先でアクセスするサーバとか,プライベートや仕事用アカウントやサーバを分けて使うといったことがお手軽にできるようになりました :-)
(プライベートと仕事は端末やアカウントを分けたほうが良いだろうけど.)

ownCLoud どんどん便利になっていきますねー.例えば Raspberry Pi の Rasbian でもパッケージで提供されているので,apt 一発で導入でき省電力ファイルサーバが簡単に作れたりもします.お勧めです.

ReText のアイコンが見えなくなっていたのを修正

ReText がなんか寂しい.よく見るとツールバーのアイコンが無いです.見えないけどボタンは動作します.

20150828_08:08:11-8636

検索してみると以下のようなエントリを発見.

真似をして以下のようにして修正しました.

icon-theme を調べる

gconftool-2 –get /desktop/gnome/interface/icon_themegsettings get org.gnome.desktop.interface icon-theme で icon_theme を調べる.上のエントリでは前者で表示されていましたが,手元の環境では後者でしか表示されませんでした.

% gconftool-2 –get /desktop/gnome/interface/icon_theme
% gsettings get org.gnome.desktop.interface icon-theme
'gnome'

ReText の設定修正

~/.config/ReText\ project/ReText.conf[General] セクションに iconTheme=上で調べたテーマ名 を指定します.今回は iconTheme=gnome

% cat ~/.config/ReText\ project/ReText.conf
[General]
autoSave=true
highlightCurrentLine=true
useWebKit=true
iconTheme=gnome

この状態で ReText を起動するとアイコンが表示されるようになりました :)

20150828_08:08:39-8956

Atom editor を Markdown editor として少し試す

https://www.flickr.com/photos/119142834@N05/20907453316/in/dateposted-public/

GitHub 開発の OSS なテキストエディタ.Node.js や Chromium やらで出来ているということで重そうだなぁと敬遠していたのですが少し試してみました.試した環境は Debian stretch amd64 です.

ということで,とりあえず導入.

% wget https://github.com/atom/atom/releases/download/v1.0.7/atom-amd64.deb
% sha256sum ./atom-amd64.deb
4562e8abb82a5fbd5bffa9bb7dcdbb81283dba7b6d8f6eb387bb167d3fbb4ed9  ./atom-amd64.deb
% sudo dpkg -i ./atom-amd64.deb
% rehash
% atom &

日本語が豆腐になるので日本語フォントを指定

Edit -> Prefarence -> Editor Settings -> Font Family
or
~/.atom/config.csoneditor: 内の fontFamily: に日本語フォントを指定

~/.atom/config.cson は今こんな感じ

"*":
  "exception-reporting":
    userId: "13047373-12a5-40a9-03bf-xxxxxxxxxxxx"
  welcome:
    showOnStartup: false
  core:
    themes: [
      "atom-light-ui"
      "atom-light-syntax"
    ]
    excludeVcsIgnoredPaths: false
    audioBeep: false
  editor:
    invisibles: {}
    fontFamily: "VL Gothic"
    softWrap: true
  "markdown-preview":
    fontFamily: "VL Gothic"
    useGitHubStyle: true

Markdown preview が豆腐になるのを修正

Markdown preview は Ctrl + Shift + m で表示できるのですが,こちらも日本語が豆腐になってしまいます.

を参考に ~/.atom/styles.less を新規作成.

* {
  font-family: VL Gothic;
  font-size:12px;
}
 
.tree-view {
}
 
.editor {
  font-size:14px;
  font-family: VL Gothic;
}
.terminal {
  font-size:12px;
  font-family: VL Gothic;
}
.markdown-preview {
  h1,h2,h3,h4,h5,h6 {
    font-family: VL Gothic;
  }
}

日本語の折り返しがうまく行かないので japanese-wrap 導入

% apm install japanese-wrap

とりあえずこれで行けるかな?この文章は Atom で書いてみました.Markdown preview で右クリック -> Copy As HTML で HTML をクリップボードに書き出して貼り付けてみました.
今のところ気になるところとしてはプレビューが追従しないのがちょっとという感じですかね.
後,書いている途中に一度フリーズしました><

暫く試してみようと思います.

haroopad が起動しなくなったのを修正

20150828_04:08:45-13916

Debian stretch amd64 で haroopad が起動しなくなった.libudev.so.0 から libudev.so.1 にリンクを張って動くようになった.

% haroopad 
/usr/share/haroopad/haroopad: error while loading shared libraries: libudev.so.0: cannot open shared object file: No such file or directory
% sudo ln -s /lib/x86_64-linux-gnu/libudev.so.1 /lib/x86_64-linux-gnu/libudev.so.0

Debian wheesy あたりから dist-upgrade を繰り返してるのでその時作られていたリンクが昨日の記事の /lib が飛んでしまって作りなおした時に消えて動かなくなったのかな?
(若しくは覚えてないけど手動でリンク貼っていたのが消えたか)

ところで Haroopad は結構バグがあるのですが最近開発停滞しているのかバージョン上がらないですね.他に良い Markdown Editor がないかな…….

今のところウェブベースの wri.pe がいい感じなのですがオフラインでは使えない.
ReText も最近は Webkitレンダラーを有効にすると大分 Markdown 対応が増えた感じですが未だ足りない感じ.
Atom Editor はちょっと重そうで敬遠しているのですが試してみようかな.
何気に適当なエディタで Markdown を書いて Pandoc でリアルタイム変換&ブラウザでプレビューとか設定するとかのほうが良いのかもしれない…….

Debian stretch で /lib を飛ばしてしまい困ったけどどうにか復旧

IMGP0010.DNG_DI4Y3X.ufraw

lxc-creates して失敗してから bash も他のアプリも起動しなくなってしまった.どうにか復旧できたのでメモ.

bash も ls も全部コマンドがないと言われる.すでに起動していた zsh では tab 補完で見つからなかったコマンドは出てくる.この状態で再起動すると recovary mode でも kernel panick に.SSD が死んだ?と戦々恐々としながら BIOS で USB 起動を有効にして USBメモリの Linux から起動して対象Disk を mount( LUKS + LVM + ext4 ) chroot しようとすると bash がないと言われる.ls すると矢張りちゃんとある.ldd ./bin/bash して ライブラリを確認しようとすると chroot 先の /lib が空!
lxc-create が host の /lib 消しちゃったぽい?

とりあえずこの状態で差分バックアップを取っておく. /home, /etc, /var, /opt あたり.バックアップログを見た感じこの辺は特に消えたりとかはしていないようだった.

多分 /lib が復活すれば治ると思う.ということで,前もって取ってあった dpkg --get-selections "*" のパッケージリストから /lib を含むパッケージを抜き出して apt-get download して,dpkg -x して出てきた ./lib/lib にcp してどうにか OS が起動するように.
その後 dpkg --configure -a とか apt-get install -f してパッケージ状態を正常な状態に.

そんなこんなでどうにか復旧しました.
思ったより時間かかってしまった.Debian Installer で起動して上書きインストールして dpkg --set-selections とかしたほうが速かったかもしれない.

多分 lxc-create でおかしくなった気がするのでこの辺ちゃんと調べたいところ.

% sudo lxc-create -t /usr/share/lxc/templates/lxc-busybox -n busybox01
lxc_container: No such file or directory - Failed to make / rslave to run template
lxc_container: Continuing...
warning : busybox is not statically linked.
warning : The template script may not correctly
warning : setup the container environment.
chmod: `/usr/local/var/lib/lxc/busybox01/rootfs/bin/passwd' 
setting root password to "root"
Failed to change root password
lxc_container: unknown key lxc.haltsignal
lxc_container: Failed to parse config: lxc.haltsignal = SIGUSR1
lxc_container: _recursive_rmdir_onedev: failed to delete /usr/local/var/lib/lxc/busybox01/rootfs/lib
lxc_container: _recursive_rmdir_onedev: failed to delete /usr/local/var/lib/lxc/busybox01/rootfs
lxc_container: Error destroying rootfs for busybox01
lxc_container: Error creating container busybox01
precmd:2: command not found: basename

awesome wm を久々に使おうとしたら設定ファイルが使えなくなっていたので再設定

screenFetch-2015-08-22_12-22-58

Debian stretch 環境の awesome を久々に起動すると awesome のバージョンが新しくなっていて設定ファイルの互換性が失われていました.jessie で使っていた頃入れたので恐らく以前のバージョンは 3.4.15 で,今は 3.5.6 です.

とりあえず規定値の設定で起動してくるのですが使いにくいので最低限ですが設定をやりなおしました.

設定ファイルとテーマファイルの差し替え

既存の古い設定ファイルとテーマファイルを差し替えます.

$ cp /etc/xdg/awesome/rc.lua ~/.config/awesome/
$ cp /usr/share/awesome/themes/default/theme.lua ~/.config/awesome/

これで規定値と同じになりました.テーマは /usr/share/awesome/themes 以下に3種類あるのでお好みで.私は今は明るい sky( /usr/share/awesome/themes/sky/theme.lua ) を利用しています.

設定変更

  • 設定ファイル修正( ~/.config/awesome/rc.lua )

    • テーマファイル変更(3.4と同じ)

      -beautiful.init("/usr/share/awesome/themes/default/theme.lua")
      +beautiful.init("~/.config/awesome/theme.lua")
      
    • 端末アプリ変更(3.4と同じ)

      -terminal = "x-terminal-emulator"
      +terminal = "mate-terminal"
      
    • スクリーンショット設定(3.5)
      以前行っていた以下の設定ではうまく行かなかった.
      Linux/WindowManager/awesome – matoken’s wiki.
      以下のファイルを用意して,

      % cat ~/script/ss-root.sh
      #!/bin/sh
      import -window root ~/Pictures/`date +%Y%m%d_%H:%m:%S-$$.jpg`
      % cat ~/script/ss-window.sh
      #!/bin/sh
      xwininfo |grep '^xwininfo: Window id:' | awk '{print $4}' | xargs -I{} import -window {} ~/Pictures/`date +%Y%m%d_%H:%m:%S-$$.jpg`
      % cat ~/script/ss-area.sh
      #!/bin/sh
      import ~/Pictures/`date +%Y%m%d_%H:%m:%S-$$.jpg`
      

      -- Standard program の前か後ろ辺りに以下を追加.

      -- bind PrintScrn to capture a screen
      awful.key({                   }, "Print", function () awful.util.spawn("/home/mk/script/ss-root.sh",false)   end),
      awful.key({ "Mod1"            }, "Print", function () awful.util.spawn("/home/mk/script/ss-window.sh",false) end),
      awful.key({ "Shift"           }, "Print", function () awful.util.spawn("/home/mk/script/ss-area.sh",false)   end),
      

      この script はパスを通してあって,3.4 では script名だけで動いていたのですが 3.5 ではフルパスでないと動かないようでした.

    • 音量ボタン設定(3.5)
      以下のようなミュートとアンミュートを行うscript audiomute.sh を用意して,

      #!/bin/sh
      MUTE=`amixer -c 0 get Master|tail -1|cut -d '[' -f 4|sed s/\]//`
      if [ $MUTE = "on" ] ; then
      amixer -q -c 0 set Master mute
      echo "mute!"
      else
      amixer -q -c 0 set Master unmute
      echo "unmute!"
      fi
      amixer -c 0 get Master|tail -1|cut -d '[' -f 4|sed s/\]//
      

      <追記>
      これだとアンミュートがうまく行かなかったです.次のエントリを参照して下さい
      Awesome wm でボリュームコントロール | matoken's meme
      </追記>

      -- Standard program の前か後ろ辺りに以下を追加.

          -- Audio Controle
      awful.key({                   }, "XF86AudioMute", function () awful.util.spawn("/home/mk/script/audiomute.sh",false) end),
      awful.key({                   }, "XF86AudioRaiseVolume", function () awful.util.spawn("amixer -c 0 set Master 2dB+",false) end),
      awful.key({                   }, "XF86AudioLowerVolume", function () awful.util.spawn("amixer -c 0 set Master 2dB-",false) end),
      

      これもやはりフルパスで script を書かないと動かない.amixer は動いているのでパスがうまく渡っていないのかも.awesome 起動後にパスが設定されてうまく動いていないという感じだと思います.

    • 自動起動アプリ指定(3.4と同じ)
      -- {{{ Autostart application
      -- "Autostart - awesome"
      -- http://awesome.naquadah.org/wiki/Autostart
      awful.util.spawn_with_shell("~/script/run_once.bash nm-applet")
      awful.util.spawn_with_shell("~/script/run_once.bash synergy")
      awful.util.spawn_with_shell("~/script/run_once.bash clipit")
      awful.util.spawn_with_shell("~/script/run_once.bash owncloud")
      awful.util.spawn_with_shell("~/script/run_once.bash xchat")
      awful.util.spawn_with_shell("~/script/run_once.bash pidgin")
      :
      -- }}}
      

      この項目は設定内にないので末尾に追加しました.
      ~/script/run_once.bash は以下のようなもので,アプリケーションの2重起動を回避するために利用しています.

      #!/bin/bash
      pgrep $@ > /dev/null || ($@ &)
      

      Autostart – awesome

  • テーマファイル修正( ~/.config/awesome/theme.lua )

    • 壁紙変更(3.5)
      -theme.wallpaper             = "/usr/share/awesome/themes/sky/sky-background.png"
      +theme.wallpaper             = "~/Pictures/wp/futur_by_takaju-d60mg7y.png"
      

awesome は軽くてサクサクで結構好きです.ただこのように設定は自分で書かないといけないのでとっつきにくいかもしれません.キーバインドも覚えないといけませんし.でも2,3日使っていると主要な物は覚えられます.
ちなみに,3.4 でもあって 3.5 でも治っていない問題として,ブラウザ等でファイルを開くとかなりの確率でアプリが落ちてしまいます.ブラウザでファイルを添付するときにすごく困ります.最近のGoogle+ や Flickr などドラッグ&ドロップで添付できるような場所はいいのですが…….

  • マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
  • Linux/WindowManager/awesome – matoken's wiki.
  • GVfs のマウントポイントを探す

    Android などでよく使う USB の mtp プロトコルですが,GVfs で自動マウントされます.ファイルマネージャの Nautilus などでアクセスできますが,途中で失敗することがあります.そこで端末上から rsync コマンドを使って失敗しても失敗した部分だけ再試行できるようにしていました.今回 Debian stretch amd64 + Gnome-shell 環境だと以前のマウントポイントの ~/.gvfs にはマウントされなくなっていました.

    % ls -lA ~/.gvfs 
    合計 0
    

    Nautilus のロケーションは次のようになっていますがこれも端末からはアクセスでき無さそう. mtp://[usb:001,009]/

    Nautilus で umount して,fuser mount して rsync してみようと思ったのですが, mtpfs も jmtpfs 失敗してしまいました.

    % mtpfs fuse/mtp
    Listing raw device(s)
    Device 0 (VID=1004 and PID=631c) is a LG Electronics Inc. LG-E610/E612/E617G/E970/P700.
    Found 1 device(s):
    LG Electronics Inc.: LG-E610/E612/E617G/E970/P700 (1004:631c) @ bus 1, dev 6
    Attempting to connect device
    Android device detected, assigning default bug flags
    Error 1: Get Storage information failed.
    Error 2: PTP Layer error 02fe: get_handles_recursively(): could not get object handles.
    Error 2: Error 02fe: PTP: Protocol error, data expected
    Listing File Information on Device with name: LGL22
    LIBMTP_Get_Storage() failed:-1
    % ls -la /home/mk/fuse/mtp
    合計 8
    drwxr-xr-x 2 mk mk 4096  8月 17 17:19 .
    drwxr-xr-x 8 mk mk 4096  8月 17 17:19 ..
    
    % jmtpfs fuse/mtp
    Device 0 (VID=1004 and PID=631c) is a LG Electronics Inc. LG-E610/E612/E617G/E970/P700.
    Android device detected, assigning default bug flags
    % ls -la /home/mk/fuse/mtp
    ls: /home/mk/fuse/mtp にアクセスできません: 入力/出力エラーです
    % fusermount -u /home/mk/fuse/mtp
    

    Nautilus で右クリックして 端末で開く から確認することが出来ました.

    Screenshot from 2015-08-17 18-19-43

    Screenshot from 2015-08-17 18-26-02

    どうも GVfs のマウントポイントは ~/.gvfs から /run/user/1000/gvfs に変わったようです. 1000 は ユーザの UID でしょうね.

    ということで,rsync でデータコピーが出来ました.

    % rsync -av /run/user/1000/gvfs/mtp:host=%5Busb%3A001%2C009%5D/内部ストレージ/DCIM /export/Photo
    

    その後 man gvfsd-fuse に発見.

       gvfsd-fuse is normally started by gvfsd(1). In this case, the mount point is $XDG_RUNTIME_DIR/gvfs or $HOME/.gvfs.
    

    確認すると一緒ですね.

    % echo $XDG_RUNTIME_DIR/gvfs
    /run/user/1000/gvfs
    

    しかし,gvfs-* 系のツールでも確認できそうなんですがうまく行かないですね…….

    % gvfs-mount -h
    用法:
    gvfs-mount [オプション...] [LOCATION...]
    ロケーションをマウントします。
    ヘルプのオプション:
    -h, --help                      ヘルプのオプションを表示する
    アプリケーションのオプション:
    -m, --mountable                 マウント可能としてマウントする
    -d, --device=DEVICE             デバイスファイルでボリュームをマウントする
    -u, --unmount                   アンマウントする
    -e, --eject                     取り出す
    -s, --unmount-scheme=SCHEME     指定されたスキームですべてのマウントを解除する
    -f, --force                     Ignore outstanding file operations when unmounting or ejecting
    -a, --anonymous                 Use an anonymous user when authenticating
    -l, --list                      リスト表示する
    -o, --monitor                   イベントを監視する
    -i, --detail                    その他の情報を表示する
    --version                       Show program version
    % gvfs-mount -l
    Drive(0): INTEL SSDSA2CW600G3
    Type: GProxyDrive (GProxyVolumeMonitorUDisks2)
    Drive(1): ST932032 0AS
    Type: GProxyDrive (GProxyVolumeMonitorUDisks2)
    Volume(0): 320 GB ボリューム
    Type: GProxyVolume (GProxyVolumeMonitorUDisks2)
    Mount(0): 320 GB ボリューム -> file:///media/mk/555bf630-0ca8-4282-9a79-7acfd6355a0a
    Type: GProxyMount (GProxyVolumeMonitorUDisks2)
    Volume(0): LGE Android Phone
    Type: GProxyVolume (GProxyVolumeMonitorMTP)
    Mount(0): LGE Android Phone -> mtp://[usb:001,009]/
    Type: GProxyShadowMount (GProxyVolumeMonitorMTP)
    Mount(1): mtp -> mtp://[usb:001,009]/
    Type: GDaemonMount
    % gvfs-info -f 'mtp://[usb:001,009]/'
    属性:
    standard::type: 2
    standard::name: [usb:001,009]
    standard::display-name: LGL22
    standard::icon: multimedia-player
    standard::content-type: inode/directory
    standard::size: 0
    standard::symbolic-icon: multimedia-player-symbolic
    access::can-read: TRUE
    access::can-write: FALSE
    access::can-execute: TRUE
    access::can-delete: FALSE
    access::can-trash: FALSE
    access::can-rename: FALSE
    filesystem::size: 38238453760
    filesystem::free: 12884361216
    filesystem::type: mtpfs
    gvfs::backend: mtp
    

    追記)
    mount コマンドで確認できるよと教えてもらいました.この時は mount コマンドや /etc/motd も確認したけど見当たらないと思っていたのですが,再確認したらちゃんと見えました.アイコン上は mount してるけど中が見えないという状態がよく起こるのですがそのタイミングで確認したのかもしれません.ちなみにその時は USB 抜き差しでも症状変わらず Android 側で PTP / MTP と切り替えると見えるようになりました.

    
    % mount|grep gvfs
    gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
    % cat /etc/mtab|grep gvfs
    gvfsd-fuse /run/user/1000/gvfs fuse.gvfsd-fuse rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0