2019年3月23日土曜日

jpg の Exif

Exifタグのメモ (Debian/GNU Linux Stretchにて)

・jpg, tiffのメタデータは、Exifだけじゃない。

Exif
 Exchangeable image file format 日本電子工業振興協会 (JEIDA)で規格化 JPEG, TIFF
https://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html

DCF
 Design rule for Camera File system IPTC(国際新聞通信委員会) JPEG

IPTC
 International Press Telecommunications Council Photo Metadata IPTC(国際新聞通信委員会)

XMP
 Extensible Metadata Platform アドビ

Exif 出力例 (値はダミー)
DateTime 年月日時分秒
 Exif.Image.DateTime               Ascii      20  2019:03:16 00:00:00
 Exif.Photo.DateTimeOriginal       Ascii      20  2019:03:16 00:00:00
 Exif.Photo.DateTimeDigitized      Ascii      20  2019:03:16 00:00:00


GPS 場所
 Exif.Image.GPSTag                 Long        1  11126
 Exif.GPSInfo.GPSVersionID         Byte        4  2.3.0.0
 Exif.GPSInfo.GPSLatitudeRef       Ascii       2  North
 Exif.GPSInfo.GPSLatitude          Rational    3  29deg 47.39000'
 Exif.GPSInfo.GPSLongitudeRef      Ascii       2  East
 Exif.GPSInfo.GPSLongitude         Rational    3  140deg 20.31000'
 Exif.GPSInfo.GPSAltitudeRef       Byte        1  Above sea level
 Exif.GPSInfo.GPSAltitude          Rational    1  03.6 m
 Exif.GPSInfo.GPSTimeStamp         Rational    3  06:07:08
 Exif.GPSInfo.GPSSatellites        Ascii       1
 Exif.GPSInfo.GPSStatus            Ascii       2  Measurement in progress
 Exif.GPSInfo.GPSMapDatum          Ascii       7  WGS-84
 Exif.GPSInfo.GPSDateStamp         Ascii      11  2019:02:19


GPSInfoタグにも年月日 GPSDateStampと時分秒 GPSTimeStampの2タグがあるので、日時 DateTimeだけを変更削除してもGPSタグで日時を推測される可能性がある。

Exif Version 2.3 http://www.cipa.jp/std/documents/e/DC-008-2012_E.pdf によれば、GPSタグが26個、下で説明の、exiv2 では30個を認識 https://exiv2.org/tags.html する。GPSタグと言ってもすべてが記録されるわけでもなく、位置情報に関するものも限られる。
更に、カメラメーカーによる独自タグもあり、Canon, Sony, Nikon, ...の名前がタグごとに入っていて、機種やレンズ、シャタースピード、露出などの撮影情報が含まれる。Canon, Sony, Nikonで眺めた限り、GPSや日時に関するものは はなかった。

"Exif.GPSInfo.GPSDateStamp"タグについては調べたほうがいいかも。
exiv2 -g Exif.GPSInfo.GPSDateStamp file.jpg して、消したほうがいいかも。



・タグの編集プログラム
注) Debianなので各コマンドのバージョンは古め。以下出力例はダミーです。

digikam
1ファイルづつタグの編集ができるらしい。KDE絡みで多量のファイルが同時インストールされるのが個人的に嫌だったので・・・試してない。

jhead
$ jhead -ts2019:03:16-00:00:00 *.jpg  ←日時の変更ts time set. DateTimeの3tagsを変える
$ jhead -purejpg M2380005.JPG           ←exif情報を全部消す

exiftool
GPSとDateTimeを弄るなら、これだけで十分。libimage-exiftool-perlパッケージ。LinuxのGUI版はpyExifToolGUIをperlでmakeインストールできそうでも面倒。
$ exiftool -gps:all= -xmp:geotag= image.jpg            ←GPSタグの削除
$ exiftool -AllDates="2019:03:16 12:34:56"          ← AllDatesは、DateTimeの 3tags
$ exiftool MVI_02001.MP4                                     ← mp4 のmetadataも表示できる

exiv2
$ exiv2 IMG_0079.JPG                       ←基本的な情報のみ表示
File name       : IMG_0079.JPG
File size       : 10
...略

$ exiv2 -pa IMG_0079.JPG                 ←exiv2で認識できる Exif, IPTC, XMPを全部表示
Exif.Image.Make                              Ascii       6  Camon
Exif.Image.Model                             Ascii      24  Camon PowerShut SiX70 H8
...略

$ exiv2 -g DateTime IMG_00251.jpg     ← -g で検索表示,大小文字区別
Exif.Image.DateTime                  ....略
Exif.Photo.DateTimeOriginal
Exif.Photo.DateTimeDigitized 

$ exiv2 ad -a 01:00:00 IMG_00251.jpg  ← DateTimeのタグ値 3つを01:00:00にする. ad adjust, -a 01:00:00 time adjust)

$ exiv2 rename img_1234.jpg                ← ファイル名を年月日時分秒にする
Renames img_1234.jpg (taken on 13−Nov−05 at 22:58:31) to 20051113_225831.jpg

$ exiv2 −r’:basename:_%Y%m’ rename img_1234.jpg    ←ファイル名に年月を付加
Renames img_1234.jpg to img_1234_200511.jpg

$ exiv2 -de rm demo.jpg          ← Exif情報だけ全部消す (-d delete, e Exif, i IPTC, x XMP)

$ exiv2 rm M2400011.JPG      ←メタ情報を全部消す

$ exiv2 -M"del Exif.GPSInfo.GPSLatitudeRef" image.jpg ←Exif.GPSInfo.GPSLatitudeRef タグを消す(値も)
-M"コマンド"ではワイルドカードが使えない。

...そこで、GPSとDateTimeの16個のタグを消すシェルスクリプト例。
注意:
 * Debianで'ls -l /bin/sh' は /bin/dash にリンクされているので配列が動かない。#!/bin/bashとする。
 * ファイル名にワイルドカードが使えない。
 * ファイル名_bak.jpgは、バックアアップ用の元ファイル。
=====  rmgpsdt.sh
#!/bin/bash

infile="$1"
ext=${infile##*.}

if [ $# -ne 1 ] ; then
    echo "argument count error."
    echo "command: rmgpsdt.sh one_file.jpg"
    echo "  remove GPS and DateTime Tags from Exif, depends on exiv2 and bash."
    exit 7
elif [ ! -e $infile ]; then
    echo "file not exist : $infile"
    exit 2
elif [ ${ext,,} != "jpg" ]; then
    echo "not jpg file : $infile"
    exit 1
else
    date_msg=`exiv2 -g Date $infile`
    gps_msg=`exiv2 -g GPS $infile`
    if [ -z "$date_msg" ] || [ -z "$gps_msg" ]; then
        echo "DateTime, GPS tags not in $infile."
        exit 1
    fi
fi

cp --backup=t $infile ${infile%.*}_bak.$ext

tags=(
"Exif.Image.DateTime"
"Exif.Photo.DateTimeOriginal"
"Exif.Photo.DateTimeDigitized"
"Exif.Image.GPSTag"
"Exif.GPSInfo.GPSVersionID"
"Exif.GPSInfo.GPSLatitudeRef"
"Exif.GPSInfo.GPSLatitude"
"Exif.GPSInfo.GPSLongitudeRef"
"Exif.GPSInfo.GPSLongitude"
"Exif.GPSInfo.GPSAltitudeRef"
"Exif.GPSInfo.GPSAltitude"
"Exif.GPSInfo.GPSTimeStamp"
"Exif.GPSInfo.GPSSatellites"
"Exif.GPSInfo.GPSStatus"
"Exif.GPSInfo.GPSMapDatum"
"Exif.GPSInfo.GPSDateStamp"
)
for tag in ${tags[@]}
do
        exiv2 -M"del $tag" $infile
done
echo "done"
=====
・・・まだ、いろいろあるけど・・・試してない
raw現像ソフト rawtherapee もmetadataを個別に消せる...何故か消せない。

その他

file
file コマンドでも結構な情報。当然編集はできない。

$ file M2380002.JPG
M2380002.JPG: JPEG image data, Exif standard: [TIFF image data, little-endian, direntries=10, manufacturer=Pandason, model=HC-VG60M, orientation=upper-left, xresolution=154, yresolution=162, resolutionunit=2, software=Ver.1.00 , datetime=2016:12:34 12:34:56], baseline, precision 8, 3200x1800, frames 3

$ file IMG_109.JPG
IMG_0096.JPG: JPEG image data, Exif standard: [TIFF image data, little-endian, direntries=12, manufacturer=Camon, model=Camon PowerShut SiX70 H8, orientation=upper-left, xresolution=196, yresolution=204, resolutionunit=2, datetime=2018:03:20 10:09:08], baseline, precision 8, 5184x2912, frames 3

・google傘下のここbloggerでは、exifはweb表示時点で一切消されてる。消した情報をgoogleがどう扱っているかは不明。

以上、素人メモ・・・追加:続編 jpg の Exif (2)

2019年3月20日水曜日

春前、山里、鳥

 ミヤマホオジロ

 コゲラ 真下向いて木を走った

 コゲラ 尻尾と2指対で木に留まる

2019年3月10日日曜日

pythonでグラフ2

pythonでグラフ1 (別ページ)
 1.python install
 2.python venv (Virtual Environments)の設定
 3.グラフでつかう matplotlibの日本語表示設定

pythonでグラフ2
 4.別途、手動で気象庁のcsvデータダウンロード
 5,悪運で動いたスクリプト


4.別途、手動で気象庁のcsvデータダウンロード
気象庁の[過去の気象データ・ダウンロード] https://www.data.jma.go.jp/risk/obsdl/index.php から、ダウンロードしたい地点、項目(今回、"時別値:気温")、期間を選んで[CSVファイルをダウンロード]する。

留意:
・1日の境界規定とcsvの記録が違うので、余裕を持った期間長でダウンロードして、後でcalc整形。気象観測統計の解説 https://www.data.jma.go.jp/obd/stats/data/kaisetu/shishin/shishin_all.pdf の「2.3.1 合計値」では「1時から24時の24回・・・」だけど、ダウンロードしたcsvでは[00:00:00から23:00:00]が1日になっている。
・1990年から毎正時観測されているが、1989年では 3時間毎のデーターしか無い。古くなれば資料数が減っていく。
・ダウンロードしたcsvは、shift-jis形式。通常の file コマンドだと、'data.csv: Non-ISO extended-ASCII text'。file-kanjiパッケージの漢字コードを調べる file2 コマンドだと、$ file2 data.csv 出力'data.csv:   SJIS text'。LibreOffice calcでも開くとき'文字エンコーディング: 日本語 (Shift-JIS)'と認識。
・1990年2月と2018年2月の日数をpython 対話モードで見ると、
>>> import calendar
>>> calendar.monthrange(1990,2)
(3, 28) ← 月の初日が(0月,1火,2水)3番目の木曜日で始まる28日間
>>> print(calendar.month(2018, 2))
   February 2018
Mo Tu We Th Fr Sa Su
          1  2  3  4
 5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28

>>> quit()
どちらも、同じ28日。

ということで、
1990年分(1990-01-01 00:00:00 から1990-12-31 23:00:00)を1990data.csv、2018年分を2018data.csvとして /home/$USER/venv/test/data/ にセーブ。

1990data.csv



5,悪運で動いたスクリプト

温度データは、さらにtestにdataディレクトリを作って 1990data.csv, 2018data.csvに置いている。
/home/$USER/venv/test/data/1990data.csv
/home/$USER/venv/test/data/2018data.csv

ソースは venvの下のtestディレクトリに plot_test.pyとした。
/home/$USER/venv/test/plot_test.py

# coding: utf-8           ← 日本語通すため DebianはLANG=ja_JP.UTF-8
import pandas as pd    ← csvに便利なライブラリ
import matplotlib.pyplot as plt  ← グラフ書くためのライブラリ
# matplotlib.use('Agg')          ← pngファイル出力savefig()に使う。ここではコメントアウト

# 1990年のcsvをshift-jisを読み込んで、いらない行を消して、文字型を日付型と小数点型に設定しなおす
f1 = pd.read_csv("data/1990data.csv", encoding="SHIFT-JIS", header=None, names=["1990yr", "1990tempe", "tr1", "tr2"])
df1 = f1.drop(range(0,5)).reset_index(drop=True)

df1['1990yr'] = pd.to_datetime(df1['1990yr'])
df1['1990tempe'] = df1['1990tempe'].astype(float)

# 2018年のcsvの処理。上と同じ
f2 = pd.read_csv("data/2018data.csv", encoding="SHIFT-JIS", header=None, names=["2018yr", "2018tempe", "tr1", "tr2"])
df2 = f2.drop(range(0,5)).reset_index(drop=True)

df2['2018yr'] = pd.to_datetime(df2['2018yr'])
df2['2018tempe'] = df2['2018tempe'].astype(float)

# 月毎に温度を合計
df1_new = df1.groupby(df1['1990yr'].dt.month).sum()
df2_new = df2.groupby(df2['2018yr'].dt.month).sum()

# 1990年に2018年をくっつける
df = df1_new.join(df2_new)

# print(df)    ← 一旦、状況を見た

# グラフ項目名など。後はデフォルトで棒グラフを設定
df.plot.bar()
plt.legend()
plt.title('某地点の毎時温度を月別で合算')
plt.xlabel("月")
plt.ylabel("℃", rotation=0)  # y軸の"℃"が下向きにならないように
plt.xticks(rotation=0)        # x軸の月目盛りが下を向かないように
plt.grid(True)

# グラフ表示
plt.show()

# plt.savefig("bar.png")  ← pngで出力。showとsavefig両方するにはバックグランド処理が必要?
# ------- end

実行前に、venv環境で matplotlib が入っているかどうか見てみる。

(venv) :~/venv$ pip list  ← $ pip show matplotlib の方が直接的
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
cycler (0.10.0)
kiwisolver (1.0.1)
matplotlib (3.0.3)
numpy (1.16.2)
pandas (0.24.1)
pip (9.0.1)
pkg-resources (0.0.0)
pyparsing (2.3.1)
python-dateutil (2.8.0)
pytz (2018.9)
setuptools (32.3.1)
six (1.12.0)

なかったら
(venv) :~/venv$ pip install matplotlib
....
プログラム実行
(venv) :~/venv/test$ python plot_test.py

ウインドが開いて、グラフが表示される。ウィンドを閉じると、(venv)にプロンプトが戻ってくる。





以上、Do素人のメモ

小数点がついた途端面倒〜!
追加:
s1 = round(df['1990tempe'].sum(), 2)
s2 = round(df['2018tempe'].sum(), 2)
text1 = '1990 total : ' + format(s1)
text2 = '2018 total : ' + format(s2)

plt.text(0, 22000, text1, fontsize=10)
plt.text(0, 21000, text2, fontsize=10)
を追加して




2019年3月9日土曜日

pythonでグラフ1

目標:
手作業で、気象庁のデータ( https://www.data.jma.go.jp/risk/obsdl/index.php )から 1990, 2018年の毎時温度をでダウンロードして、各月で合算してグラフにする・・・なんの意味もないデス。
手作業でcalcちまちまやっても30分あれば済むことを、Do素人が、初pythonで初グラフ。

結果:

環境:
OS : Debian GNU/Linux Stretch, KDE, Python3.5

作業:
pythonでグラフ1
 1.python install
 2.python venv (Virtual Environments)の設定
 3.グラフでつかう matplotlibの日本語表示設定

pythonでグラフ2 別ページ
 4.別途、手動で気象庁のcsvデータダウンロード
 5,悪運で動いたスクリプト

1.pythonのインストール
pythonバージョン2系はディフォルトで入っている。
python3系で試したいので、パッケージ名 python3.5 , python3.5-venv, python-pip とその依存パッケージをインストール。
(後に使用する python3-matplotlib, python3-pandas などのdebパッケージはここではインストールせず、仮想環境のvenvで pip install した。)

2.venv の設定
設定は、ディレクト以下に作られる。必要なファイルコピー、その後パス通しをやってるみたい。ここでは安易に "venv"というディレクトリ名にした(任意で、py_venvでもtestPythonでもなんでもいい)。/home/$USER/に置き、python3を使う設定とした。(以下、ユーザー名$USER, プロンプト表示は各環境による)。
ターミナルを開いて、
$ cd
$ pwd /home/$USER
$ python3 -m venv                   ← ここで ディレクトリ venvも作られる。

次に 仮想環境を試してみる
$ cd venv
$ source bin/activate             ← 仮想環境の機能開始
(venv) :~/venv$ python -V    ← プロンプト頭に (venv)と出る。パイソンのバージョン
Python 3.5.3                         ← python3 -V としてないのに、ちゃんとバージョン3.5
(venv) :~/venv/test$ pip3  ← この環境では pip3も pipも同じ。
Usage: 
  pip [options]
Commands:
  install        Install packages.
  ... (省略)
(venv) :~/venv$ pip install pandas  ← 先で使うpandasというライブラリもインストール
Collecting pandas
  Using cached https:/...
  ... (省略)
(venv) :~/venv$ deactivate          ← 仮想環境の機能を止める

結局、venv環境でpython3を使うには、venvディレクトリで

$ cd venvディレクトリ
$ source bin/activate
・・・
$ deactivate

・・・という流れ。venv を使わなくなったら、ディレクトリごと削除。

 [pip のメモ]
 pipのバージョンは?
 $ pip --version
 pip でパッケージは何入れた?
 $ pip freeze
 pythonのバージョン何にした?
 $ python --version
 Python 3.5.3
 Debian stretchの venvには PySide2もインストール簡単
 $ pip install PySide2

3.グラフ作成でつかうmatplotlibの日本語表示の設定
現状は、
$ source bin/activate
(venv) :~/venv$ python                 ← 対話モード(インタラクティブモード)
Python 3.5.3 (default, Sep 27 2018, 17:25:39)
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib as mpl
>>> print(mpl.rcParams['font.family'])
['sans-serif']                         ← sans-serif だけ
>>> print(mpl.rcParams['font.sans-serif'])
['DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Sef', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avantarde', 'sans-serif']
>>> quit()                             ← 対話モード終了は CTRL+D か quit()
(venv) :~/venv$ deactivate              ← venv環境終了


matplotlibは ttfフォント(TrueType フォント)とotfフォント(OpenType)に対応。
以下は Takaoフォント(TakaoGothic, TakaoPGothic, TakaoMincho, TakaoPMincho)の利用で説明。

$ apt search takao
出力に[インストール済み]表記が無い場合、この出力を参考にパッケージをインストール。
(DebianにはデフォルトではTakaoフォントは入っていない。)
$ sudo apt install fonts-takao

インストールの確認を再びpythonで行ってみる。
$ source bin/activate
(venv) :~/venv$ python                 ← 対話モード(インタラクティブモード)
Python 3.5.3 (default, Sep 27 2018, 17:25:39)
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib.font_manager as fm
>>> fm.findSystemFonts()

この出力を mpl_font.txtなんかにコピペしてやる (改行無いのでエラーでるかも)。
見やすいように、普通のターミナルで整形してソート。
$ cat mpl_font.txt | tr ',' '\n' | sort > font.txt
$ grep Takao font.txt
 '/usr/share/fonts/truetype/takao-gothic/TakaoGothic.ttf'
 '/usr/share/fonts/truetype/takao-gothic/TakaoPGothic.ttf'
 '/usr/share/fonts/truetype/takao-mincho/TakaoMincho.ttf'
 '/usr/share/fonts/truetype/takao-mincho/TakaoPMincho.ttf'
拡張子を抜いたファイル名 TakaoGothic, TakaoPGothic, TakaoMincho, TakaoPMinchoは、matplotlibの設定ファイル matplotlibrc で使う。

venv環境で使うフォントなので、venv環境の対話モードで matplotlibrcの場所を聞く。
>>> import matplotlib as mpl
>>> mpl.matplotlib_fname()
'/home/$USER/python venv/lib/python3.5/site-packages/matplotlib/mpl-data/matplotlibrc'
設定ファイルの場所がわかったので、quit()してdeacivate

matplotlib を開いてみると、Debianでは行頭が全部'#'でコメントアウト。
"FONT"で検索していくと"#### FONT"以下が見つかる。
195行 # font.family          : sans-serif
206行 # font.serif            : DejaVu Serif, Bitstream Vera Serif, ...
207行 # font.sans-serif    : DejaVu Sans, Bitstream Vera Sans, ,,,

この3行の# を消して、206行の207行のフォントリストの最初にTakaoPMincho,TakaoPGothic,を書き込み保存。
font.family          : sans-serif
font.serif             : TakaoPMincho, DejaVu Serif, Bitstream Vera Serif, ... ←この行はいじらなくてもいいかも
font.sans-serif   :: TakaoPGothic, DejaVu Sans, Bitstream Vera Sans, ...

一旦、フォントキャッシュを消す (すぐ再生されるので気にしない)。
$ rm -r ~/.cache/matplotlib

再度(venv)で確認
(venv) :~/venv$ python                 ← 対話モード(インタラクティブモード)
Python 3.5.3 (default, Sep 27 2018, 17:25:39)
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib as mpl
>>> print(mpl.rcParams['font.family'])
['sans-serif']
>>> print(mpl.rcParams['font.sans-serif'])
['TakaoPGothic', 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Sef', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avantarde', 'sans-serif']
TakaoPGothicを認識

注意) python venv環境の削除や、アップデートの度に matplotlibrcは上書きされてデフォルトに戻るので、matplotlibrcは再設定が必要。

以上で matplotlibの日本語設定終了。

DO素人のメモ

2019年3月1日金曜日

Kate のメモ

Linux上のディスク環境KDE用のエディター Kate : KDE advanced text editor の設定。
環境 Debian Stretch   $ kf5-config --version Qt: 5.7.1 KDE Frameworks: 5.28.0 kf5-config: 1.0   $ kate --version kate 16.08.3 
・ 拡張子によって Kateが開くようにするには、KDEの設定を使う。
例えば、python慣例の".py"なら、
KDEのシステム設定→[個人設定:アプリケーション]→[ファイルの関連付け]で "python"を入力検索。[既知のタイプ : text→x-python]をクリックして、右タブに現れる[ファイル名パターン]を確認、[アプリケーションの優先順位]で Kateが一番上に来るように [^ 上へ移動(U)] をクリックして調整→適用。


・Kateからターミナルを立ち上げる 
KDE用の端末エミュレーター Konsoleが立ち上がる。

Kateの[設定]→[Kateを設定]→[アプリケーション : プラグイン]→[ターミナルツールビュー]にチェックを入れて[OK]。Kateの下に[ターミナル]のアイコンが出る。

Kateで開いたディレクトリで Konsoleを立ち上げるには、kateの[設定]→[Kateを設定]→[アプリケーション : ターミナル]→[可能なときは自動的にターミナルを現在の文書と同期する (U)]をチェック


以上、素人のメモ

2019年1月29日火曜日

USB外付けハードディスクのマウント Debian

接続したら、外付けUSBハードディスクの所有者が rootになって書き込みできない。

結論:
接続したまま
$ sudo chown -R user:user /media/user/ラベル名 or UUID

抜き差し後も、再起動後も userで読み書き可能になった。
-R ディレクトリごと
user:user 所有者:グループ

前提:
OS: Debian GNU/Linux 9.7 (stretch)
Desktop : KDE Plasma version 5.8.6
USB ハードディスク : UUID (Universally Unique Identifier)による機器の指定が面倒なので、ext4にフォーマット時にラベル指定 (例 ExDisk)。

原因(曖昧):
初めて該当外付けハードディスクを繋いだとき、フォーマットとディスク検査をやるためにroot状態だったからなのか、udisks2がルートでスクリプトを作ってしまった...とか?

関連:
udisks2について
・Debian 8 (jessie)以降、外部接続のメディアは udisks2というサービス(D-Bus, udisksd)によって自動認識される。
・(多分) 接続をudisksdが検知して D-Busを使って動的に /media/user/下にLabel名 or UUIDで適切にマウントポイントを作る。
・KDEでUSBにメディアを接続したときアンダーバー(パネル)に現れる「デバイスの通知」や、クリックでのマウント/アンマウントはこのサービスを利用している。
・KDEシステム設定→ ハードウェア : Removable Strageも udisks2の設定。

・udisks2のサービス確認。
$ ps aux | grep udisks
/usr/lib/udisks2/udisksd の表示がでれば、サービスが動いている。

udisks2が動いていれば
例)
$ udisksctl status
MODEL                     REVISION  SERIAL               DEVICE
--------------------------------------------------------------------------
WDC WD10EZRX-00A8LB0      01.01A01  WD-WCC1U1234567      sda   
WDC WD10EARS-00Y5B1       80.00A80  WD-....
...
BUFFALO External HDD      0000      00123456789999D      sdc
...接続のみで、まだマウントしてない BUFFALO...も表示される。

・udisksctl の使用例
マウントする
$ udisksctl mount -b /dev/sdc1
Mounted /dev/sdc1 at /media/user/ExDisk
-b ブロックデバイス

アンマウント
$ udisksctl unmount -b /dev/sdc1

状態確認
$ udisksctl status


・systemctl を使って udisks2をコントロール
サービスの停止
# systemctl stop udisks2.service

停止の確認
# systemctl status udisks2

サービス開始
# systemctl start udisks2
サービス再起動
# systemctl restart udisks2

udisks2はディフォルトでboot時に自動的に起動する。起動サービスから削除して無効化
# systemctl disable udisks2

マニュアル起動も阻害
# systemctl mask udisks2
maskの確認
# systemctl is-enabled udisks2
masked (とのみ表示)
マスクの解除
# systemctl unmask udisks2
無効化の確認
# systemctl is-enabled udisks2
再有効化
# systemctl reenable udisks2

systemctlによるudisks2の確認
# systemctl status udisks2
# systemctl show udisks2

以上素人のメモ

2019年1月14日月曜日

vnStat vnStati

(Debian GNU/Linux 9 Stretch, vnstat バージョン 1.15 にて)

概要:
何メガバイト使ったんだろ〜という…ネットワーク通信量がわかるコマンドライン。
・synaptic, discover, apt などでインストール。
・vnstatはテキスト形式で表示。
  例) $ vnstat -d
      -d : 日付ごとの通信量


・vnstati は png, gif, jpg, bmp, tiff...形式で画像出力。
  例) $ vnstati --locale C -i enp0s32ff -d -o ./test.gif      ←enp0s32ffは任意
環境が LANG=ja_JP.UTF-8だと、vnstatiは、「年月日」を空白にして出力してしまうので、'--locale C' オプション。Localeの指定は、/etc/vnstat.conf でもできる (デフォルト Locale="-" システムロケール)。
test.gif
Debian 9 (Stretch)以降、ネットワークインターフェイス(NIC)の命名方式が変更され、eht0がデフォルトではなくなった。ens0やenp1s1、wlp3s0...のように各PCで表示が異なる(en - ethernet, sl - serial line IP slip, wl - wlan, ww - wwan)。
 $ sudo dmesg | grep eth0 すると"...renamed from eth0"とでる。
 例) インターフェイス名をさがす。
 $ ip a
 $ ls /sys/class/net/
 $ netstat -i
 $ ip link show (= ip l)
 $ nmcli device show  
vnstat / vnstatiのデフォルトは eth0。/etc/vnstat.confの # default interface Interface "eth0" を書き換えるとインターフェイス指定の -i enp0s3... オプションがいらない (要root)。
・ログファイル /var/lib/vnstat/[enp0s32ff | eth0 ...]の削除
 $ sudo vnstat -i enp0s32ff --force --delete
 Database for interface "enp0s32ff" deleted.
 The interface will no longer be monitored. Use --create
 if monitoring the interface is again needed.

  /var/lib/vnstat/enp0s32ff が削除された。vnstatdはactive。

・再び再開
 $ sudo vnstat -i enp0s32ff --force --create
 Creating database for interface "enp0s32ff"...
 Info: -> A new database has been created.

本家 : https://humdi.net/vnstat/

その他
・関連ファイル
  設定 : /etc/vnstat.conf
  デフォルトのログ先 : /var/lib/vnstat/[enp0s32ff | eth0 ...]
  vnstatd : systemctlから起動されるデーモン(ps aux | grep vnstat )
・rx 受信、tx 送信。
・vnstatは、/proc/net/dev を利用してる?

systemctl を使ったコントロール
・継続的 (OS起動毎に自動起動させて)に利用するには、
 # systemctl enable vnstat.service

・使用可の確認
 $ systemctl is-enabled vnstat  (vnstat.service としても同じ?)
 enabled

・状態の確認
 $ systemctl status vnstat
 ● vnstat.service - vnStat network traffic monitor
 ....
 KDEなら、以下でも確認できる
 KickOff→アプリケーション→システム→システムモニタ : プロセステーブル (検索) vnstat 「すべてのプロセス」or「すべてのプロセス、ツリー表示」。
 KickOff→アプリケーション→設定→システム設定 : Units [All]or[services] (検索) vnstat。

・OS起動毎に自動起動しなくていい  (systemctl enable vnstat の終了)。
 # systemctl stop vnstat ; systemctl disable vnstat
 停止しても /etc/vnstat.confとログファイル /var/lib/vnstat/任意 は残っている。

・一時的に使用/停止
 # systemctl start vnstat
 # systemctl stop vnstat

・vnstati のグラフ色変更
 /etc/vnstat.conf の # image colors で定義されている。変更するには、
https://humdi.net/vnstat/ の Features online color configuration editor : https://humdi.net/vnstat/coloredit/ にて試し、vnstat.confを書き換えるといい。

・vnstat-dashboard と言う PHP + Apache2(httpd) + Docker を使ったグラフィカル表示版もあるけど、なんでか動かなかった。

   - -- - -- - -- -
・ (vnstatの話ではない) ネットのIPv6の無効化
 # echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
 # sysctl -p (確認)
  net.ipv6.conf.all.disable_ipv6 = 1
 $ ip a (確認)


以上、素人のメモ