tmux でコマンドライン履歴のスクロールバックとコピペ

tmux使用中にShift+PageUpしても画面がスクロールしていってしまって,tmuxの中の履歴を参照できず困っていた.
これは,tmuxのコピーモードを使えば解消するらしい.

実は,tmux の部分は全部 man tmux に載ってる.

プレフィックス(デフォルトでC-b)をPrefixと表記する.

キーバインド(viモードの場合)

key binding explanation
Prefix+[ コピーモード開始
q コピーモード終了
Space Start selection
Enter Copy selection
Prefix+] Paste the most recently copied buffer of text

X Window system clipboardとの連携

$ sudo apt-get install xsel
bind-key > save-buffer ~/.tmux-buffer \; run-shell 'xsel -b -i < ~/.tmux-buffer' \; display-message "Copied to clipboard"
bind-key < if-shell 'xsel -b -o > ~/.tmux-buffer' 'load-buffer ~/.tmux-buffer ; paste-buffer'

python3 で seaborn を使うまで

python3系でvenvを使う想定.

ubuntuとかだとpython3は入っているので,他にいりそうなものを入れる.

$ sudo apt-get install python3-dev python3-venv python3-tk tk-dev

python3-devはnumpyとかのコンパイルに,venvはpipとかをローカルで使うために,tk系はmatplotlibでプロットするウィンドウをコンソールから起こすために使う.

venvで環境を整える.
どこでもいいけど,私は ~/.py3 に環境を作っている.

$ cd
$ pyvenv-3.4 .py3
$ source ~/.py3/bin/activate

source ~/.py3/bin/activateはaliasにしといた方が良いと思う.
以降,source ~/.py3/bin/activateした状態を,(.py3) $と表記する.

必要なパッケージをインストールする
pipでパッケージを入れるが,もしかしたらディストリのパッケージのうち,必要なものが抜けているかも知れない.
build-essentialとかgfortranとか…エラーが出るはずなので,その時に検索すること.
ともかく,以下でpython上の依存関係は入る.

$ pip install seaborn
matplotlibの設定ファイルを変更
(.py3) $ python -c 'import matplotlib;print(matplotlib.matplotlib_fname())'
/home/USERNAME/.py3/lib/python3.4/site-packages/matplotlib/mpl-data/matplotlibrc

で場所を見付けて,backend と書かれた行が agg だったら,tkaggに変更する.

ed25519で公開鍵認証

sshの鍵をrsaをやめてed25519にしてみたことについて.
オープンサーバにSSHで入れるようにして,色々な国からのハッキングっぽいアクセスログが残っている現状を鑑みれば,とりあえず強化しておくに越したことはないよね,っつー話.
あと,RSAの鍵長を伸ばして行くと,ログインにちょっと時間がかかる気がしており,ed25519はrsaより短い鍵長で同程度の強度を誇るらしいので,ちょっとは公開鍵認証の処理が早くならんかしらと期待しているのもある.

実行速度とかは,この辺を参照→自堕落な技術者の日記 : RSAとECDSA、署名生成と署名検証どっちが速い? - livedoor Blog(ブログ)

鍵の生成

とりあえずデフォルトで.

$ ssh-keygen -t ed25519 -C 'comment'

今んところできないのか,原理的なものによりできないのか,とりあえずビット長の指定はきかない.
できあがる鍵は ~/.ssh/id_ed25519[.pub]

sudo した時,zsh がエラーを出すようになった

エラーはこんな感じ.

zsh compinit: insecure directories, run compaudit for list.
Ignore insecure directories and continue [y] or abort compinit [n]?

compinitが食べてるpathを片っ端からchmod g-wしてみたけど,消えない.
zshenvでcompinit -uしてるしなぁと思ったものの,zshが起動する時に読み込む設定ファイルを片っ端から調べてみたら,エラーの回数だけ -u が外れているものを見付けた.
私の場合,

  • ~/.zsh/.zshrc
  • /etc/zsh/zshrc

昔は出てなかったので,何かのタイミングに切り戻されたりアップデートされたりしたのやも知れん.
ともかく解決して良かった.

virtualbox on ubuntu で USB 機器が認識できなくなった

少し前まで,ホストマシンにUSB接続しているScansnapのフタを開けば,ubuntu の上の virtualbox で仮想化している windows から自動的に見えるよう設定していたのであるが,ある日突然,認識しなくなっていた.

切り分け

フィルタは有効か?
設定は残っている.試しに消してみて,追加し直そうとしてみたところ,追加すべきデバイスが見付からない様子であった.
VboxからUSBデバイスは見えているか?
$ VBoxManage list usbhost
Host USB Devices:

<none>

のように,認識していない.

デバイスはホストOSから認識しているか?
$ lsusb
(略)
Bus 001 Device 004: ID 04c5:1096 Fujitsu, Ltd fi-5110EOX
(略)

のように,認識している.

vboxmanageグループにローカルユーザは所属しているか?
$ grep vbox /etc/group
$

!?
そもそもvboxusersグループがないやーん!

対処

単にグループ作るだけでうまくワークするか分からんかったので,vboxの再インストール.
設定消えたりすると面倒なので,remove/installで.

$ sudo apt-get remove virtualbox-5.0
$ sudo apt-get install virtualbox-5.0
$ grep vbox /etc/group
vboxusers:x:125:
$ sudo gpasswd -a USER vboxusers

動作確認→まだ認識しない!

$ groups
USER adm cdrom ... # vboxusersがない!

多分,起動し直して,/etc/groupを読み直してもらえばいいのでは?

$ sudo reboot

再起動後…!! 復活!!

uim-skk で カンマやピリオドを句読点の代わりに使うなど

これではダメだった→UIM-skk の句読点をカンマ・ピリオドに. - 落書き、時々落学

ので,これで(anthyとなっているけど,skkでもいける)→uim-anthy で句読点をカンマドットに変える - Qiita

ちなみに,「z+」で全角スペースを入力する場合,
input:「z 」(z+
next:(何も入力しない)
output:「 」(全角スペース)
とすると良い.

input:z
next:「 」(半角スペース)
output:「 」(全角スペース)
とすると,全角スペースの後ろに半角スペースが入る.

rxvtでuimを使って漢字変換をしようとすると真っ白になる現象の対処

環境
ディストリ:ubuntu 14.04
ウィンドウマネージャ:xmonad
ターミナル:rxvt-unicode

現象
uim-skkを使用してurxvt上で日本語入力をする時、かな入力は問題ないが変換モードで入力しようとすると入力した文字列が背景色・文字色とも白となり文字を視認できない
入力を確定すると、ターミナルのフォントで日本語文字が入力され、視認できる

対処
以下の設定があれば、消す。
または、24とする。
何故かは不明。

- urxvt.depth: 32
+ urxvt.depth: 24

xmonad環境でxmobarの設定をホスト名で振り分ける

gitとかで設定ファイルを管理して,新しいマシンではgit clone hogehogeし,ホームディレクトリにシンボリックリンクを張るだけでいつもの環境になって欲しい.
この時,shの設定は簡単に振り分けられるが,馴染のないhaskellで書かされるxmonadの設定とxmobarの設定をどう振り分けるのか困るのであった.

haskellを普段使いしている人には何のことない話なんだけど…

import System.Posix.Unistd

main = do
    host <- fmap nodeName getSystemID -- ホスト名を host にセット
    -- どれが良いか分からんので,上手くいかない時は以下も試してみる
    -- or host <- nodeName `fmap` getSystemID
    -- or host <- nodeName <$> getSystemID  -- 要 import Control.Applicative
    myStatusBar <- spawnPipe $ "xmobar ~/.xmonad/.xmobarrc_" ++ host -- 文字列の連結

ibusのステータス(現在使っているIME)をxmobarに表示する

ibus のエンジンをコマンドラインで引けるので,簡単に出せるのだった

Config  { commands = [ -- (略)
                     , Run Com   "/usr/bin/ibus" ["engine"] "MyIME" 10
                     -- (略)
                     ]
          , template " XXXXX  %MyIME% XXXXX"
        }

私の環境だと,skkとか出る.
時々,IMEがバグってenとかに陥っている時とかに,ここで確認できることを期待して表示させている.

今回,ibusの状態を可視化することによって,skkが落ちているのではなく,C-jを受け付けない状況にい陥ってるのだと判明.
ibus-daemonの再起動 (ibus-daemon –drx) で直ることも判明.

LinkStation (LS-QVL) が時々ハングるので,中身を調べてみた

proxy配下に置いたLinkStationが,週に1回くらいハングってくれるので,ちょっといじってみたよ.
結果はどうなることやら.

sshで入れるようにする

LinkStation に ssh で root ログインできるようにする - maruko2 Note.
を参照した.
一般ユーザでログインできるようにしようとしたら,色々と抑止策が施されていて,リブートするごとに設定が巻き戻ったり(正確にはsshd再起動で巻き戻る)するので,rootでパスワードログインすることで良いことにした.
気になる人は公開鍵認証にしてはどうか.試してないけど.
あと,コマンドライン履歴にパスワードが残る運用は私の中ではあり得ないので,ファイルに書き出したのをコマンド内で呼んでいる.
あと,gつけるのは怖いので,私はsedにgはあんまつけない.ちゃんと動きそうか,catとかで確認すること.

  1. パスワード設定
    $ IP="192.168.1.X"
    $ Admin_PW=$(cat admin_passwd)
    $ ROOT_PW=$(cat root_passwd)
    $ java -jar acp_commander.jar -t $IP -ip $IP -pw $Admin_PW -c "(echo $ROOT_PW ; echo $ROOT_PW) | passwd"
    $ java -jar acp_commander.jar -t $IP -ip $IP -pw $Admin_PW -c "cat /etc/sshd_config"
    $ java -jar acp_commander.jar -t $IP -ip $IP -pw $Admin_PW -c "sed -i 's/UsePAM yes/UsePAM no/' /etc/sshd_config"
    $ java -jar acp_commander.jar -t $IP -ip $IP -pw $Admin_PW -c "sed -i 's/PermitRootLogin no/PermitRootLogin yes/' /etc/sshd_config"
    $ java -jar acp_commander.jar -t $IP -ip $IP -pw $Admin_PW -c "/etc/init.d/sshd.sh restart"
  2. ログイン
    $ ssh root@$IP

ログを探す1

どうも,/var/log/syslogがないなーと思ったら,/var/log/messagesに色々と書いてあった.
前回暴走直前の挙動を調べると,majishanzuかmDNSResponder辺りが怪しい.

  1. とりあえず,majishanzu を/etcで探しても見付からないので,頑張って探す.
    # which majishanzu
    /usr/local/sbin/majishanzu
    # grep majishanzu /usr/local/sbin/majishanzu
    /etc/melco/majishanzu
    majishanzu_state
    /var/lock/majishanzu_update
    /etc/melco/majishanzu/
    /tmp/majishanzu_dl
    %s/majishanzu_info
    /etc/melco/majishanzu/majishanzu_state
    majishanzu success
    majishanzu
    majishanzu start
    

    しかし,/etc/melco/majishanzu には情報はないのであった.

  2. 続いて,ログの直前にtwonkyのログが出ていたので,twonkyから呼び出されているのでは?と推測.
    検索したら出てきた.
    Linkstation Duo LS-WXL - how to access media server confguration page (port 9050)
    /usr/local/twonky-alt/ へ

    # cd /usr/local/twonky-alt/
    # grep majishanzu *
    twonky.sh:MS_DL_LOCK_FILE=/var/lock/majishanzu_update
    twonky.sh:MAJISHANZU_DIR=/etc/melco/majishanzu
    (略)
    

    grepをかけると,twonky.shで呼び出されているので,中を読む.
    /usr/local/sbin/majishanzu のある時,do_majishanzuが呼ばれているようなので,元ファイルをリネームして退避すれば,もう二度と呼ばれないはず.

    # mv /usr/local/sbin/majishanzu /usr/local/sbin/majishanzu.bak
  3. ちなみに,絶対どこかから呼び出されて動作しているはず,と思ってcrontab -lで出てくるスクリプトが置いてある/etc/cron/cron,d内をgrepしてみると,ms_checkversion.shの中にtwonky.shが書かれている.
    こいつは30分に1回呼ばれていた.

ログを探す2

mDNSResponderも止めておこうと調べてみると,bonjour関係のプロセスだった.
そういえばiTunesを使ってた時にwindowsでも見たことある.

面倒臭いので結論から言うと,こいつはcronではなく/etc/init.d/bonjour.shから呼ばれていて,/etc/melco/infoの中を見るとbonjour=onの設定が書かれており,bonjour.shの中でこいつがonなら…という行がstart()にあるので,/etc/melco/infoを書き換えてbonjour=offとしてみた.