Welcome to kuma35’s memo

Contents:

はじめに

公開できるメモを置いていきます。備忘です。

Ubuntu Linux を CUI ログインに

そもそも正常にログインできてない時

GRUBでlinux...の行のroの後ろ辺りに systemd.unit=multi-user.target を追加して起動。

参考

Ubuntu 15.04 を GRUBメニューから CUI で起動する方法(防備録)

http://qiita.com/ikwzm/items/5514b0fe9a8728e8aecb

正常にログインできているとき

$ systemclt get-default
$ sudo systemctl set-default multi-user.target

コンソールで日本語表示

videoグループに属してないと使えないので,まずadduserして、 一旦ログオフ、ログオン(一旦ロフオフしないとadduserは反映されない)

$ sudo adduser <<username>> video

インストール。

$ apt-get install fbterm unifont
$ LANG=C
$ fbterm -s 16
$ LANG=ja_JP.UTF-8

LANG=Cしてからfbterm立ち上げると文字が欠けない…なんで?

$ sudo chown <<username>>:<<group>> ~/.fbtermrc

参考

fbterm を使う(Ubuntu 13.10)

http://pulpdust.org/item/1702

fbtermのインストール・設定及びその他まとめ

https://banken07.wordpress.com/2013/02/19/fbterm%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%83%BB%E8%A8%AD%E5%AE%9A%E5%8F%8A%E3%81%B3%E3%81%9D%E3%81%AE%E4%BB%96%E3%81%BE%E3%81%A8%E3%82%81/

コンソールでCaps LockキーをCtrlにする

/etc/default/keyborad の

XKBOPTIONS=”“

XKBOPTIONS=”ctrl:nocaps” にして、
$ sudo dpkg-reconfigure -phigh console-setup

でOK。

参考

CapsLockをCtrlにするまとめ

http://lambdalisue.hatenablog.com/entry/2013/09/27/212118

の、「console-setupを利用した方法」参照。

SSHサーバを建てる

サーバにOpenSSHをインストール。

$ sudo apt-get install openssh-server

クライアントで共通鍵、秘密鍵生成。ここではclientのマシン名をmeviusとする。

$ ssh-keygen -t rsa -f ~/.ssh/id_rsa.mevius

.ssh に id_rsa.mevius と id_rsa.mevius.pub が出来る。

秘密鍵をサーバのauthorized_keyに追加。

$ cat id_rsa.mevius.pub >> authorized_keys

クライアントでは秘密鍵を指定してsshにアクセス。 .ssh/configに書いておくと便利。

Host 192.168.1.1
IdentityFile    ~/.ssh/id_rsa.mevius
User            hideo
$ ssh 192.168.1.1

とすると秘密鍵~/.ssh/id_rsa.meviusを自動的に使う。

以後はアクセスするサーバが増える度に手元のid_rsa.mevius.pubをサーバに転送し、authorized_keyへ追加する。

lighttpdインストール

on Ubuntu Linux 15.10 i386

$ sudo apt-get install lighttpd

サービス自動起動無効

$ sudo systemctl | grep cups
cups.path            loaded active running   CUPS Scheduler
cups-browsed.service loaded active running   Make remote CUPS printers available locally
cups.service         loaded active running   CUPS Scheduler
cups.socket          loaded active running   CUPS Scheduler

$ sudo systemctl disable cups.path cups-browsed.service cups.service cups.socket

ユーザに/ttyUSB0の書き込み権限を付与

(ubuntu 15.10 i386)ユーザhideoをdialoutグループに追加する。

$ sudo adduser hideo dialout

ログインしなおす。 ログインしなおさないと反映されないので注意!!

Python3用pip

$ sudo apt-get install python3-pip
$ pip3 install pyserial

デフォルトのエディタを変更

(Ubuntu 15.10 i386)

$ sudo update-alternatives --config editor

ちなみに、update-alternativesで設定されているグループがどれだけ あるか知りたいときは

$ update-alternatives --get-selections

pyenv on Ubuntu 16.10 amd64

sudo apt install python3-venv
pyenv install 3.5.2

pyenv on Ubuntu 15.10 i386

sudo apt install libssl-dev libbz2-dev libreadline-dev libsqlite3-dev
pyenv install 3.5.1

CAPSキーをCTRLキーにする(Ubuntu 15.10)

CAPSキーをCTRLキーにする(Ubuntu 15.10)(on X Window)

キー追加

dconf reset /org/gnome/settings-daemon/plugins/keyboard/active

Caps Lockキーの設定は/org/gnome/desktop/input-sources/xkb-optionsで設定するのでまず現在の値を見る。

dconf read /org/gnome/desktop/input-sources/xkb-options

デフォルトは未設定で、この場合だとCaps LockキーはCaps Lockとして、CtrlキーはCtrlとしてそれぞれ動作する。 この値を目的に応じて設定する。

Caps LockキーをCtrlキーに割り当てる(元々のCtrlキーはそのままCtrlとして動作する)

dconf write /org/gnome/desktop/input-sources/xkb-options "['ctrl:nocaps']"

CAPSキーをCTRLキーにする(Ubuntu 15.10)(console)

/etc/default/keyboard

# XKBOPTIONS=""
XKBOPTIONS="ctrl:nocaps"            # CapsLock --> Ctrl
# XKBOPTIONS="ctrl:swapcaps"        # CapsLock <-> Ctrl

変更を適用

$ sudo dpkg-reconfigure -phigh console-setup

電源管理

ノートPCの蓋を閉じてもサスペンドしない

/etc/systemd/logind.conf

HandleLidSwitch=ignore

サスペンドキーとハイバネーションキーを無効にする

/etc/systemd/logind.conf

HandleSuspendKey
サスペンドキーが押された時に行う動作を定めます。
HandleHibernateKey
ハイバネートキーが押された時に行う動作を定めます。

サスペンドキーとハイバネーションキーを無効にします。

HandleSuspendKey=ignore
HandleHibernateKey=ignore

Read the Docsを使う手順

  1. githubとかにリポジトリを作る
  2. Read the Docsでプロジェクト作成
  3. Read the Docsでgithbuのurlを登録
  4. githubの設定のwebhookでreadthedocsを選択
  5. 以後、githubにpushするたびにRead the Docsも更新

デバイス名を固定

高性能USB-TTL/485コンバータ(FT-UBF-TTL485)

高性能USB-TTL/485コンバータ(FT-UBF-TTL485) [1] は、 なにもしないと Arudino NANOと同様 /dev/ttyUSB%n で認識されるため、 どちらの認識が早いかで /dev/ttyUSB0 と /dev/ttyUSB1 が入れ替わることがあるので固定しておく。 更にFT232を使ったドングルを2種類繋ぐことがあるのでATTR{serial}で区別。

Bus 001 Device 010: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC

ATTRS{serial}は以下のコマンドで調べた。

$ udevadm info -q all -n /dev/ttyUSB0

/etc/udev/rules.d/ に 62-ft485r.rules を作成。

# for USB-TTL/485 convertor FT-UBF-TTL485
ATTRS{idVendor}=="0403",ATTRS{idProduct}=="6001",ATTRS{serial}=="A7039N11",KERNEL=="ttyUSB*",SYMLINK+="ttyFT485R"

24ピンDIP-ICサイズ FT232RL USB-シリアル変換モジュール

USB-シリアル変換モジュール FT232RL [2]

/etc/udev/rules.d/ に 62-ft232r.rules を作成。

# for USB-TTL/232 convertor FT232RL
ATTRS{idVendor}=="0403",ATTRS{idProduct}=="6001",ATTRS{serial}=="AH01JKEI",KERNEL=="ttyUSB*",SYMLINK+="ttyFT232R"

ミニマイコンモジュール [N328P] [3]

Arduino nano互換

Bus 001 Device 019: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter

/etc/udev/rules.d/ に 62-arduino-nano.rules を作成

# for Arduino nano compatible N328P
ATTRS{idVendor}=="1a86",ATTRS{idProduct}=="7523",KERNEL=="ttyUSB*",SYMLINK+="ttyN328P"

マイクロソフト ウェブカメラ LifeCam HD-5000

mjpg-streamerではシンボリックリンクを認識しないので、識別用のみに使用し、realpathコマンドで得たパスを与える。

Bus 002 Device 003: ID 045e:076d Microsoft Corp. LifeCam HD-5000

/etc/udev/rules.d/ に 63-ms-hd5000.rules を作成。

# for MS LifeCam HD-5000
ATTRS{idVendor}=="045e",ATTRS{idProduct}=="076d",KERNEL=="video*",SYMLINK+="webcam1"

マイクロソフト フルHD Webカメラ LifeCam Studio Q2F-00020

mjpg-streamerではシンボリックリンクを認識しないので、識別用のみに使用し、realpathコマンドで得たパスを与える。

Bus 001 Device 008: ID 045e:0772 Microsoft Corp. LifeCam Studio

/etc/udev/rules.d/ に 63-mslifecam.rules を作成。

# for MS LifeCam Studio Q2F-00020
ATTRS{idVendor}=="045e",ATTRS{idProduct}=="0772",KERNEL=="video*",SYMLINK+="webcam2"

USBロケットランチャー

40-rocketlauncher.rules

SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ACTION=="add", SYSFS{idVendor}=="1941", SYSFS{idProduct}=="8021", GROUP="plugdev", MODE="0660"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ACTION=="add", SYSFS{idVendor}=="0a81", SYSFS{idProduct}=="0701", GROUP="plugdev", MODE="0660"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ACTION=="add", SYSFS{idVendor}=="1130", SYSFS{idProduct}=="0202", GROUP="plugdev", MODE="0660"

Footnotes

[1]aitendo。1,250円(税別)( http://www.aitendo.com/product/10245 ) 2016年3月現在。
[2]秋月電子 950円(税別)( http://akizukidenshi.com/catalog/g/gK-01977/ ) 2016年3月現在。
[3]aitendo。1,250円(税別)( http://www.aitendo.com/product/10700 ) 2016年3月現在。

mjpg-streamer

$ sudo apt-get install subversion libjpeg-dev imagemagick

最新版をsvnリポジトリから取得。そのままcheckoutすると/usr/bin/へmjpg-stramerのバイナリを書き込もうとするので、ignore-extarnalsオプションで抑止する。

$ cd
$ svn checkout --ignore-externals http://svn.code.sf.net/p/mjpg-streamer/code/ mjpg-streamer-code
$ cd ~/mjpg-streamer-code/mjpg-streamer
$ make

Note

このままの権限で使い続けるのでインストール(sudo make install)はしない。

利用するユーザはvideoグループに属している必要があるので追加する。

$ sudo gpasswd --add <<username>> video

ログアウト、ログインして反映する。

動作確認

$ ./mjpg_streamer -i "./input_uvc.so -d /dev/video1 -y -r 1920x1080 -f 1" -o "./output_http.so -w www"

設定例

Webカメラ用サーバからport8080で送出し、apache2のリバースプロキシで /cam2 に見せる。

Webカメラ用サーバ(192.168.1.2)

$ ./mjpg_streamer -i "./input_uvc.so -d /dev/video1 -r 1920x1080 -f 1 -y -n" -o "./output_http.so -p 8080 -w www"

Webサーバ(192.168.1.6) proxy.conf内で...

ProxyPass /cam2 http://192.168.1.2:808
ProxyPassReverse /cam2 http://192.168.1.2:8080

http://192.168.1.6/cam2 にアクセスすると mjpegで再生される。

デバイス名固定

mjpg-streamerはデバイス名へのシンボリックリンクを辿れないようなので、以下のようにrealpathコマンドを介して利用する。 なお、固定方法そのものについては デバイス名を固定 を参照してください。

$ ./mjpg_streamer -i "./input_uvc.so -d `realpath /dev/webcam2` -r 1920x1080 -f 1 -y -n" -o "./output_http.so -p 9999 -w www"

startx

$ sudo systemctl start lightdm

最近は、こうやるそうである。

startx.sh もゴリゴリカスタマイズすれば可能…

X停止

$ sudo systemctl stop lightdm

で、できたけど、これが正式な作法なのかどうかは不明。

コマンドラインもろもろ

カレントディレクトリ以下のファイルの大きい順に50個

$ du -ch | sort -rh | head -n 50

特定のディレクトリ以下を除外したファイルリスト作成

$ find $HOME \( -type d -and \( -name '.cache' -or -name '.compiz-1' \) -and -prune \) -or \( -type f -and -print \)

pip install で追加された ~/.local/bin をパスに加える

~/.profile

# for python pip install commands.
if [ -d "$HOME/.local/bin" ]; then
    PATH="$HOME/.local/bin:$PATH"
fi
$ source ~/.profile

ufw

$ sudo ufw default DENY
$ sudo ufw allow OpenSSH
$ sudo ufw enable

/etc/ufw/applications.d/openssh-outer-server

[OpenSSH outer]
title=Secure shell server, an rshd replacement
description=OpenSSH is a free implementation of the Secure Shell protocol.
ports=10000/tcp

ルールを削除する方法

その1.ルールの追加したときのコマンドラインでufwの直後にdeleteを付けて実行

追加時

$ sudo ufw allow 8080

それを削除する。

$ sudo ufw delete allow 8080

その2.行番号を指定して削除

$ sudo ufw status numbered
状態: アクティブ

     To                         Action      From
     --                         ------      ----
[ 1] 9999/tcp                   ALLOW IN    Anywhere
[ 2] 80                         ALLOW IN    Anywhere
[ 3] OpenSSH                    ALLOW IN    Anywhere
[ 4] Samba                      ALLOW IN    Anywhere
[ 5] 8080                       ALLOW IN    Anywhere
[ 6] 9999/tcp (v6)              ALLOW IN    Anywhere (v6)
[ 7] 80 (v6)                    ALLOW IN    Anywhere (v6)
[ 8] OpenSSH (v6)               ALLOW IN    Anywhere (v6)
[ 9] Samba (v6)                 ALLOW IN    Anywhere (v6)
[10] 8080 (v6)                  ALLOW IN    Anywhere (v6)
$ sudo ufw delete 5
削除:
allow 8080
操作を続けますか (y|n)? y
ルールを削除しました
$ sudo ufw delete 10

途中に追加する

insert <<number>> RULE

<<number>> の位置にRULEを挿入する。元々<<number>>の位置にあったRULEは後ろにズレる。

x11vnc

Ubuntu15.10MATE(on Raspberry Pi 2 model B)

参考のとおりに。

$ sudo apt install x11vnc
$ sudo x11vnc –storepasswd /etc/x11vnc.pass

/lib/systemd/system/x11vnc.service

[Unit]
Description=Start x11vnc at startup.
After=multi-user.target

[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /etc/x11vnc.pass -rfbport 5900 -shared

[Install]
WantedBy=multi-user.target
$ sudo systemctl daemon-reload
$ sudo systemctl enable x11vnc.service

ポート5900を開放する。

$ sudo ufw allow 5900

マシンをリブート

$ sudo reboot

クライアントマシンからアクセス。

$ sudo gvncviewer 192.168.1.2:0

Nexus7では「アンドロイドvnc」で接続できた。Vnc Viewerでは繋がらなかったが原因は未調査。

mailをgmailにリレーするだけ

ubuntu 15.10(i386)

メールを全部gmailに放り投げるだけなので、 軽そうなssmtpを使ってみる。

$ sudo apt install ssmtp

/etc/ssmtp/ssmtp.confをいじる。

メールアドレス
hogehoge@gmail.com
パスワード
fuga1234

とする。

mailhub=smtp.gmail.com:587
rewriteDomain=gmail.com
hostname=gmail.com
AuthPass=fuga1234
AuthMethod=LOGIN
UseSTARTTLS=YES
FromLineOverride=YES

再起動等は不要。

テスト

test-mail.txt

To:hogehoge@gmail.com
From:hogehoge@gmail.com
Subject:test-mail

test-mail
$ sudo /usr/sbin/sendmail -t < test-mail.txt

メーラーなりWebメールなりでメールが届いていれば成功。

mailで送る

mailを使うにはUbuntu 16.04LTSではaptする必要があった。

sudo apt install mailutils

ffmpeg

$ ffmpeg -f video4linux2 -list_formats all -i /dev/video1

ffmpeg version 2.7.6-0ubuntu0.15.10.1 Copyright (c) 2000-2016 the FFmpeg developers

built with gcc 5.2.1 (Ubuntu 5.2.1-22ubuntu2) 20151010

configuration: –prefix=/usr –extra-version=0ubuntu0.15.10.1 –build-suffix=-ffmpeg –toolchain=hardened –libdir=/usr/lib/i386-linux-gnu –incdir=/usr/include/i386-linux-gnu –enable-gpl –enable-shared –disable-stripping –enable-avresample –enable-avisynth –enable-frei0r –enable-gnutls –enable-ladspa –enable-libass –enable-libbluray –enable-libbs2b –enable-libcaca –enable-libcdio –enable-libflite –enable-libfontconfig –enable-libfreetype –enable-libfribidi –enable-libgme –enable-libgsm –enable-libmodplug –enable-libmp3lame –enable-libopenjpeg –enable-openal –enable-libopus –enable-libpulse –enable-librtmp –enable-libschroedinger –enable-libshine –enable-libspeex –enable-libtheora –enable-libtwolame –enable-libvorbis –enable-libvpx –enable-libwavpack –enable-libwebp –enable-libxvid –enable-libzvbi –enable-opengl –enable-x11grab –enable-libdc1394 –enable-libiec61883 –enable-libzmq –enable-libssh –enable-libsoxr –enable-libx264 –enable-libopencv –enable-libx265 –disable-i686

libavutil 54. 27.100 / 54. 27.100
libavcodec 56. 41.100 / 56. 41.100
libavformat 56. 36.100 / 56. 36.100
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 16.101 / 5. 16.101
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 2.100 / 1. 2.100
libpostproc 53. 3.100 / 53. 3.100

[video4linux2,v4l2 @ 0xa011d00] Raw : yuyv422 : YUYV 4:2:2 : 640x480 1280x720 960x544 800x448 640x360 424x240 352x288 320x240 800x600 176x144 160x120 1920x1080

[video4linux2,v4l2 @ 0xa011d00] Compressed: mjpeg : Motion-JPEG : 640x480 1920x1080 1280x720 960x544 800x448 640x360 800x600 432x240 352x288 176x144 320x240 160x120

[video4linux2,v4l2 @ 0xa011d00] Raw : Unsupported : YUV 4:2:0 (M420) : 640x480 1280x720 960x544 800x448 640x360 424x240 352x288 320x240 800x600 176x144 160x120 1920x1080

bootstrap tips

モーダルダイアログへのデータ渡し

modalでdata-*を渡すときはon(‘click’)...$(#modal).modal()では渡らなかった。 こちらでイベント定義せずにdata-toggle,data-targetを定義しbootstrap側で予め定義されたイベントに任せると上手く渡った。

beaker tips

セッションID

session = request.environ.get('beaker.session')
logger.debug(request.get_cookie(session_opts['session.key'])))
logger.debug(pformat(session.id))

session.id でクッキーに設定する予定のと同じid文字列が得られる。 get_cookieは初回、まだクッキーを設定していない時は’None’を返す。

virtualenvからvenvへ移行

Ubuntu 16.04LTS(Python 3.5.2)

準備

Ubuntu 16.04LTS(i386)ではpyvenvをインストールする必要があった。

sudo apt install python3-venv

移行作業

元の場所は ${HOME}/.virturalenvs/py3bottle として、移行先フォルダを ${HOME}/work/pyvenv/py3bottle とする。

まず、1階層上までフォルダを作る。

mkdir -p ${HOME}/work/pyvenv

元々のremoteのurlを確認

cd ${HOME}/.virturalenvs/py3bottle
git remote -v

として表示されたoriginのURLを控えておく。

cd ${HOME}/work/pyvenv
git clone ${HOME}/.virtualenv/py3bottle

元のフォルダで git remote -v した結果をcloneしたリポジトリにも反映させる。

git remote set-url origin <<url>>

当該フォルダのvenv環境作成

pyvenv py3bottle

有効化

source ${HOME}/work/pyvenv/py3bottle/bin/activate

とすると有効化できる。

以下のようにしてaliasを組んでおくと便利。

alias py3bottle source ${HOME}/work/pyvenv/py3bottle/bin/activate;cd ${VIRTUAL_ENV}

py3bottleと打つと環境を有効化し、当該ディレクトリに移る。

cd $VIRTUAL_ENV

当該ディレクトリに移動したい時。

venv無効化

有効化している状態で deactivate と入力。

環境の削除

virturalenvと異なりvenvの設定ファイルは当該フォルダ下にしかないので、 当該フォルダを削除するだけでよい。

Python unittestの中でloggingを使う

環境

Python 3.5.2(Ubuntu 16.04LTS(i386))

in setUp()

setUp()の中では通常通りloggerを開く。streamHandlerだと何も出ないので FileHandlerなどで他所へ出力してください。この例ではlog_fileで指定した ファイルへ出力しています。

    def setUp(self):
        """Open serial port."""
        self.ser = serial.Serial(com_port,
                                 com_boud,
                                 timeout=com_timeout)
        self.logger = getLogger(__name__)
        formatter = Formatter('%(asctime)s - '
                              '%(levelname)s - '
                              '%(filename)s:%(lineno)d - '
                              '%(funcName)s - '
                              '%(message)s')
        self.sh = FileHandler(log_file, delay=True)
        self.sh.setLevel(DEBUG)
        self.sh.setFormatter(formatter)
        self.logger.setLevel(DEBUG)
        self.logger.addHandler(self.sh)

tearDown()で扱えるよう、shとloggerをself.sh、self.loggerとします。

in tearDown()

sh.close()して、loggerからshをremoveHandler()します。

sh.close()しないと2つ目以降のtestを実行する時にResouce warnng unclose fileと怒られます(実行はできるが、tail -f で追えない)。

Handlerをremoveしないと、当該suite内でテストを実行するたびに Handlerが追加されてログ出力がダブります。

    def tearDown(self):
        """Cosing serial port."""
        self.ser.close()
        self.sh.close();
        self.logger.removeHandler(self.sh)

注意

setUp()とtearDown()なので、当然ながら 各テストごとにログのセットとクローズが走ります。

arduino-mk with Arduino IDE 1.6.12

環境

Python 3.5.2(Ubuntu 16.04LTS(i386))

pyserial==3.1.1

Install arduino-mk

とってくる。

git clone https://github.com/sudar/Arduino-Makefile.git

ここでは ${HOME}/work/Arduino-Makefile に置いたとする。

Get Arduino IDE 1.6.12

ArduinoのページからLinux32用を取得し展開。

ここでは ${HOME}/.arduino/arduino-1.6.12 とする。

Makefile

# Arduino Make file. Refer to https://github.com/sudar/Arduino-Makefile
ARDUINO_DIR = $(HOME)/.arduino/arduino-1.6.12
AVR_TOOLS_DIR = $(ARDUINO_DIR)/hardware/tools/avr
ARDMK_DIR = $(HOME)/work/Arduino-Makefile
BOARD_TAG = uno
MONTOR_PORT = /dev/ttyACM0
AVRDUDE_CONF = $(ARDUINO_DIR)/hardware/tools/avr/etc/avrdude.conf
include $(HOME)/work/Arduino-Makefile/Arduino.mk

Arduinoのライブラリ指定する場合は$(HOME)/sketchbook/librariesに追加の上、 ARDUINO_LIBSに列記してください。

# Arduino Make file. Refer to https://github.com/sudar/Arduino-Makefile
ARDUINO_DIR = $(HOME)/.arduino/arduino-1.6.12
AVR_TOOLS_DIR = $(ARDUINO_DIR)/hardware/tools/avr
ARDMK_DIR = $(HOME)/work/Arduino-Makefile
BOARD_TAG = uno
MONTOR_PORT = /dev/ttyACM0
AVRDUDE_CONF = $(ARDUINO_DIR)/hardware/tools/avr/etc/avrdude.conf
ARDUINO_LIBS += Wire Adafruit_MotorShield
include $(HOME)/work/Arduino-Makefile/Arduino.mk

make

compileのみ。

make

compileとアップロード。

make upload

その他

シリアルコンソールはino serialの方が 使いやすかったのでそっちを使っています。

ポリプロピレン(1mm厚)に38mm穴を穿孔

木工用ホールソーを使いました。

_images/hole-saw-image1.jpg _images/hole-saw-image2.jpg

今回は下穴3mmを木工用ドリルで穿孔後ホールソーを使いました。

ポリプロピレンは食いつきが悪いので根気よく低速で数十秒回転させる。その後も時々確認しながら低速で根気よく。速度コントロールが重要なのでボール盤ではなく電動ドライバードリル使いました。

なお、写真の商品(amazon https://www.amazon.co.jp/gp/product/B003NVBNW2 )に関してはレビューにある通り、センタードリルを固定するネジのネジ穴にタッピングが必要でしたトホホ(ネジ径M5、ピッチ0.8mm中タップ)。

_images/hole-saw-image3.jpg

byobuのlsのdircolorsを変更

Ubuntu 16.04LTS(32bit)

byobu(backend screen)の中でlsしたときの色を変更する。

byoubの中でlsでディレクトリ表示するとダークブラウンの背景に灰色表示とか非常に見難いので、Ubuntuのデフォルトのdircolorsにする。

/usr/share/byobu/profiles/bashrc の中で、 /usr/share/byobu/profiles/dircolorsを読み込んでる。

全ユーザで共有する場合

byobuを起動していない状態で

dircolors -p > /tmp/dircolors.ubuntu
cd /usr/share/byobu/profiles
sudo cp /tmp/dircolors.ubuntu .
sudo mv dircolors dircolors.byobu
sudo ln -s dircolors.ubuntu dircolors

として無理やり変更。

自分の環境のみ

byobuを起動していない状態で

dircolors -p > $(HOME)/.byobu/.dircolors

.byobu/promptファイル

[ -r /usr/share/byobu/profiles/bashrc ] && . /usr/share/byobu/profiles/bashrc  #byobu-prompt#

行を追加する。

[ -r /usr/share/byobu/profiles/bashrc ] && . /usr/share/byobu/profiles/bashrc  #byobu-prompt#
if [ -x /usr/bin/dircolors ]; then
  test -r ~/.byobu/.dircolors && eval "$(dircolors -b ~/.byobu/.dircolors)" || eval "$(dircolors -b)"
  alias ls='ls --color=auto'
  #alias dir='dir --color=auto'
  #alias vdir='vdir --color=auto'

  alias grep='grep --color=auto'
  alias fgrep='fgrep --color=auto'
  alias egrep='egrep --color=auto'
fi

noip2 client daemon for sytemd

noip2 client インストール

$ wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz
$ tar xf noip-duc-linux.tar.gz
$ cd noip-2.1.9-1/
$ sudo make install

sign upのユーザ名とパスワードを聞いてくるので入力。配置場所はデフォルトでは バイナリは /usr/local/bin/noip2 で、 conf は /usr/local/etc/noip2.conf

systemd対応

を参考に /lib/systemd/system に noip2.service を作る。

[Unit]
Description=No-IP Dynamic DNS Update Client
After=network.target

[Service]
Type=forking
ExecStart=/usr/bin/noip2

[Install]
WantedBy=multi-user.target

有効化する。

$ sudo chmod 644 /usr/local/bin/noip2
$ sudo systemctl enable noip2.service
Created symlink from /etc/systemd/system/multi-user.target.wants/noip2.service to /lib/systemd/system/noip2.service.
$ sudo systemctl status noip2.service
● noip2.service - No-IP Dynamic DNS Update Client
             Loaded: loaded (/lib/systemd/system/noip2.service; enabled; vendor preset: enabled)
             Active: inactive (dead)
$ sudo systemctl start noip2.service
$ sudo systemctl status noip2
● noip2.service - No-IP Dynamic DNS Update Client
             Loaded: loaded (/lib/systemd/system/noip2.service; enabled; vendor preset: enabled)
             Active: active (running) since 金 2017-01-27 04:55:15 JST; 21s ago
             Process: 1881 ExecStart=/usr/local/bin/noip2 (code=exited, status=0/SUCCESS)
Main PID: 1883 (noip2)
CGroup: /system.slice/noip2.service
        └─1883 /usr/local/bin/noip2

1月 27 04:55:15 merit systemd[1]: Starting No-IP Dynamic DNS Update Client...
1月 27 04:55:15 merit systemd[1]: Started No-IP Dynamic DNS Update Client.
1月 27 04:55:15 merit noip2[1883]: v2.1.9 daemon started with NAT enabled
1月 27 04:55:16 merit noip2[1883]: hogehoge.ddns.net was already set to XXX.XXX.XXX.XXX

Indices and tables