Raspberry Pi OS (32-bit) with desktop NFS Samba Server

当サイトのメインのデスクトップは相変わらずRaspberry Pi3ですがvncserverのRaspberry Pi4を導入、動画の視聴を含めてその他できることは極力Pi4で実行することでPi3の負担はかなり軽減することができました。
Pi4にはUSB3.0が搭載されていることからNFS Samba Serverとしても有効な使い方ができると思います。

現在Raspberry Pi4は開発途上ということもありSSD(sda3)はユーザーディレクトリだけマウントしてカードはいつでも書き換えできるようマイクロSDで運用しています。

NFSサーバー

Unix系のOSではNFSが標準になると思います。
SSD(sda4)を使って試して見ることにします。

$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 111.8G  0 disk
├─sda1        8:1    0   256M  0 part
├─sda2        8:2    0  29.3G  0 part
├─sda3        8:3    0  58.6G  0 part /home/pi
└─sda4        8:4    0  23.7G  0 part
mmcblk0     179:0    0  28.9G  0 disk
├─mmcblk0p1 179:1    0   256M  0 part /boot
└─mmcblk0p2 179:2    0  28.7G  0 part /

マウント
マウントは/home/nfsとします。

# mkdir /home/nfs

# blkid /dev/sda4
/dev/sda4: LABEL="data2" UUID="f6f604ff-5a15-4fa7-a812-f51ad8fcdb4f" TYPE="ext4" PARTUUID="d9b3f436-04"

/etc/fstab
PARTUUID=d9b3f436-04  /home/nfs       ext4    defaults,noatime   0 1

# mount -a

インストール

# apt install nfs-kernel-server

/etc/exports(もっと適正なマウントオプションがあるかもしれません)

/home/nfs   192.168.0.0/24(rw,async,crossmnt,no_root_squash,no_subtree_check)

nfs-server再スタート

# systemctl restart nfs-server

NFSクライアント

クライアントにはnfs-common rpcbindがインストールしてあればいいと思います。
Raspberry Osではインストール済と思うので設定だけでいけるはずです。
NFSは活きているようです。(Raspberry Pi4の/etc/hostname /etc/hostsはpi4にしています)

$ showmount -e pi4
Export list for pi4:
/home/nfs 192.168.0.0/24

オートマウント
実用にはオートマウントが便利です。

# apt install autofs

いくつか/etc/auto*がインストールされます。
ディレクトリ/etc/auto.master.dに設定ファイル作成(auto.orangepi3) # 適当に
当サイトのファイルサーバー(orangepi3)はすでに稼働しているのでこのファイルに追記します。
/etc/auto.master.d/auto.orangepi3

/home/hda   -fstype=nfs,rw,defaults  orangepi3:/home/hda
/home/nfs   -fstype=nfs,rw,defaults  pi4:/home/nfs

クライアントのマウントポイント(/home/nfs)はautofsが自動で作成します。

/etc/auto.master 末尾近くに記載

/- /etc/auto.master.d/auto.orangepi3  --timeout=600

+auto.master

autofs restart

# systemctl restart autofs


クライアントの/home以下にnfsが見えてきます。サイドバーのnfsはブックマーク
現在の/home/nfsはroot所有になっています。ユーザー権限で読み書きするにはオーナーやパーミッションを運用、セキュリティに留意して変更します。Pi4からroot権限で実行


取り敢えず/home/nfsをユーザー所有にしてテスト

Sambaサーバー

WindowsやAndoroid端末用にSambaサーバーを構築

# apt install samba


デフォルトのいいえを選択

デフォルトのsmb.confはバックアップして簡単に設定ファイル作成
同じく/home/nfsを公開します。
/etc/samba/smb.conf

[global]
    server string = Raspberry Pi 4 SMB Server
    security = USER
    map to guest = Bad User
    guest account = root
    log level = 0
    syslog = 0
    load printers = No
    printcap name = /dev/null
    disable spoolss = Yes
    preferred master = No
    local master = No
    domain master = No
    dns proxy = No
    create mask = 0775
    directory mask = 0775
    printing = bsd
    browseable = Yes

[NFS]
    path = /home/nfs
    force user = pi
    force group = pi
    create mode = 0664
    directory mode = 0755
    public = No
    browseable = yes
    writable = yes
    guest ok = yes

Samba Restart

# systemctl restart smbd nmbd


SambaサーバーはPi3のネットワークから見えてきます。


/home/nfsをクリックすると認証画面が出ます。
接続するをクリック
接続は可能ですが別途smbパスワードの設定が必要のようです。
毎回認証画面が出ます。


接続、読み書きはOKです。
通常はNFSを使うのでいいことにします。


Windowsはほとんど起動することのないASUS X200MAがあります。
Windowsから接続
認証画面が出ます。こちらはWindowsに設定しているパスワードが通ります。

Raspberry Pi OS (32-bit) with desktop Graphics Gimp

最近はタイル型ウインドウマネージャー(dwm)にはタイル型ランチャー(python3-tk)でしょうということでお気に入りのメニューを作成しています。
少し大きめの64×64サイズで作成、簡単な書式である程度自由に構成することが可能です。
基本のアイコン画像はOSに含まれる画像を利用してGimpで少しだけ加工しています。
またメニューの数が少ないうちはいいのですが増やしていくとアイコンナンバーがバッティングしたりと作成が面倒になるため一定のルールの中で作成、運用しようと思います。

Gimp

# apt install gimp

アイコン画像

基本画像は/usr/share/icons以下にあります。この中から48×48サイズの画像を適当なディレクトリにコピーしてGimpでキャンパスサイズを64×64サイズに変換しています。

少し大きめのキャンパスサイズにして必要であれば文字入れをしたりします。
透過の画像は背景の塗りつぶしをTransparencyにしてファイル-上書きエクスポートすれば出来上がりです。


Gimpの使い方については目的用途などでググるとほとんど見つかると思います。

Category

作成したアイコン画像はカテゴリー別に登録します。

各カテゴリーは3桁の数値で分けています。
画像のsample.pyは100-defaultで作成したExitボタンをコピーしたものです。
予め各カテゴリで作成しておけば基本の書式は共通なので以降は必要なボタンをコピーするだけでメニューが出来上がります。ボタンの並び(row,column)は変更します。
プログラムファイルは~/binにありますがicon画像は共有するためNFSサーバー上に置いてあります。
# icon dirにディレクトリを指定

sample.py

#!/usr/bin/python3

from tkinter import *
from tkinter import ttk
from tkinter import messagebox
import subprocess
import time

root = Tk()
root.title('Python Menu')
style = ttk.Style()
style.theme_use('default') #('clam', 'alt', 'default', 'classic')
style.configure('TButton', background='#D9D9D9') # Button color

# Frame as Widget Container
frame1 = ttk.Frame(
    root,
    padding=5)
frame1.grid()

# icon dir
dir = "/home/hda/hda3/share/icons/"

# Button115 exit
def def115():
    root.quit()
icon115 = PhotoImage(file=dir+'100-default/exit.png')
button115 = ttk.Button(frame1,image=icon115,command=def115)
button115.grid(row=3,column=5)

root.mainloop()

chromium-browserを追加(クリックしたらメニューは終了)

# Button351 chromium-browser
def int351():
    subprocess.run("chromium-browser &", shell=True)
    root.quit()
icon351 = PhotoImage(file=dir+'350-internet/chromium.png')
button351 = ttk.Button(frame1,image=icon351,command=int351)
button351.grid(row=1,column=1)


起動はxbindkeysやdmenuスクリプトを利用するといいでしょう。
カテゴリー(メイン)メニューを作成してみました。作成した各カテゴリーメニューを呼びます(いつ完成するか分かりませんが)
作成したメニューや定形のスクリプトなども実行できます。
書き方次第でいろいろ応用が効くと思います。

Raspberry Pi OS (32-bit) with desktop 日本語環境

前回に続いて日本語環境の設定をします。
前回のdwm設定は日本語フォントをインストールした上でコンパイル実行したので多少前後するかもしれません。違いはフォントの見栄え、大きさ位と思います。

フォントインストール

基本フォントは特に問題が無ければいつも同じフォント、設定をするようにしています。
フォント設定は好みがあるのであくまで当サイトの設定例です。
カードを作成した際ルートディレクトリ以下(zzz/font_set)にスクリプトと65*confをコピーしています。
/zzz/font_set/font_set.sh

#!/bin/sh
sudo apt install -y fonts-ipafont fonts-ricty-diminished
sudo cp /zzz/font_set/65* /etc/fonts/conf.avail
cd /etc/fonts/conf.d
sudo ln -s ../conf.avail/65-fonts-ipa-mincho.conf
sudo ln -s ../conf.avail/65-fonts-ipa-pgothic.conf
sudo ln -s ../conf.avail/65-fonts-monospace.conf
sudo mv 31-mono-substitute.conf 66-mono-substitute.conf

65-fonts-ipa-mincho.conf
65-fonts-ipa-pgothic.conf
65-fonts-monospace.conf

インストール実行

$ sudo sh /zzz/font_set/font_set.sh

Raspberry OSでは独自に31-mono-substitute.conf(Liberation Mono)が設定されています。
当サイトでは字幅の少ないricty-diminishedを使いたいので31-mono-substitute.confを66-mono-substitute.confにmvして優先順位を下げることで65-fonts-monospace.confを有効にしています。

Fcitxインプットメソッド

Raspberry Pi OS (32-bit) with desktopを正常にインストール完了してあれば日本語入力(fcitx)が使えるようになっています。
dwmはシステムトレイが無いので表に出して上げます。

$ fcitx-configtool


日本語キーボードを追加して一番上にしてあげます。


入力メソッドのオンオフが良ければディフォルトのまま


システムトレイアイコンを使うのチェックを外すとアイコン表示する
状態パネルを隠すモードを表示
フォントサイズ 0デフォルト 10前後位

起動時にfcitx起動
~/.vnc/xstartup

#!/bin/sh
xrdb $HOME/.Xresources
xsetroot -solid gray3
xsetroot -cursor_name left_ptr
vncconfig nowin=1 &
xbindkeys &
fcitx &
sleep 10
dwm &
xterm -e ranger ~/ &

sleepを少し長めに入れないと起動時のターミナル(アプリケーション)で日本語入力ができません。

shell設定

shell設定を書くのを忘れていました。適当なところに追記
~/.bashrc

export XMODIFIERS="@im=fcitx"
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx

~/.cshrc の場合

setenv  LANG   ja_JP.UTF-8
setenv  XMODIFIERS @im=fcitx
setenv  GTK_IM_MODULE fcitx
setenv  QT_IM_MODULE fcitx


fcitxも快適に使えます。

Fcitx Skin

下記のサイトに使いやすいスキンが紹介されています。

Fcitxのスキンを自分の好みにカスタマイズする



設置は簡単でダウンロード、展開してコピーするだけです。
logo.pngは使えるようになっていますが画像が入っていません。勝手に好きな画像を入れろよ!という配慮と思います。
Piロゴ(赤、白)を入れてみました。
画像はwebから拾ってimagemagickで16×16サイズに縮小します。

# apt -y install imagemagick
$ convert -geometry 16x16 raspberrypi.png logo.png
$ sudo mv logo.png /usr/share/fcitx/skin/tomoshibi


常時表示していてもうるさくない白にしました。

Raspberry Pi OS (32-bit) with desktop Tiger VNC + dwm

前回はRaspberry Pi4にReal VNCでRaspberry Pi OS デフォルトdesktopをインストールしましたが今回はvncserverをTiger VNCにウインドウマネージャーをdwmに変更します。
作業環境としてはRaspberry Pi3からssh vncviewerで接続、作業しています。

Tiger VNC


Tiger VNCのメリットしては表示速度が早い、シンプル(くどくない)なことなどが挙げられると思います。欠点はマシン間で日本語のコピペができない。

Real VNCを削除してTiger VNCと入れ替えます。

Raspberry Pi4

# apt -y purge realvnc-vnc-server
# apt -y install tigervnc-standalone-server tigervnc-common tigervnc-viewer

Raspberry Pi3
realvnc-vnc-viewerからtigervnc-serverに接続はできますが表示速度は遅い(逆は不可)
Recommended SoftwareからVNC Viewerのチェックを外して削除、tigervnc-viewerをインストール

# apt -y install tigervnc-viewer

tigervnc-serverの起動
tigervnc1.9.0になってから起動は環境変数を指定する必要があります。
下記ページの最後の方に方法が載っています。
https://github.com/TigerVNC/tigervnc/issues/800

$ vncviewer LD_PRELOAD=/lib/arm-linux-gnueabihf/libgcc_s.so.1 vncserver :1 -localhost no

Pi3からsshでPi4にログインして上記のコマンドを実行、最初にパスワードを求められます。
~/.vnc以下にファイルpasswdが作成されます。
passwdをPi3の適当なディレクトリにコピー、リネーム(~/.vnc/pi4とします)
Pi3から接続(Pi4のvnc.confは別途作成、後述)

$ vncviewer -passwd /home/pi/.vnc/pi4 192.168.0.4:1

dwm


タイル型ウィンドウマネージャのdwmはコンパクト、軽快で慣れないうちは多少のクセがあるもののvncserverには最適と思っています。
パッケージからもインストールできますが軽快に使うにはコンパイルは必須と思います。

# apt -y install libxinerama-dev libxft-dev

dwm 6.2 ダウンロード 編集

$ wget https://dl.suckless.org/dwm/dwm-6.2.tar.gz
$ tar tar -xvf dwm-6.2.tar.gz

展開するとconfig.def.hがあるのでコピーしてconfig.hを編集します。
当サイトのconfig.h
フォンサイズ変更
タイトルバーカラー変更
modキー windowsキー
左右の境界線比率
横分割 modキー+ i
縦分割 modキー+ u
アプリケーション終了 modキー+ q

編集が済んだらmake (数秒で完了)

$ sudo make clean install

コンパイルしたファイルは/usr/local/binにコピーされます。
出来上がったファイルは48900バイトの小さいファイルで変更が無ければ以降コピーするだけで使うことができます。
dmenuは別途インストールします。(suckless-tools)
単体もしくはsurfブラウザをインストールすると依存でインストールされます。

その他

xterm + vimは適切に.vimrcを設定します。
アプリケーションランチャとして本来のdmenuだけでは使いにくいのでdmenuスクリプトとxbindkeysで使いやすく設定します。https://dbpro.xyz/6749

# apt -y install xterm xbindkeys

xterm
~/.Xresources

XTerm*utf8              : 1
XTerm*locale            : false
XTerm*faceName          : monospace
XTerm*faceSize          : 9
XTerm*fontDoublesize    : true
XTerm*saveLines         : 2000
XTerm*geometry          : 80x24
XTerm*charClass: 33:48,37:48,45-47:48,38:48,64:48
XTerm*background: #222222
XTerm*foreground: #DDDDDD
XTerm*color0:     #333333
XTerm*color1:     #A94952
XTerm*color2:     #83A949
XTerm*color3:     #A99F49
XTerm*color4:     #4983A9
XTerm*color5:     #A94983
XTerm*color6:     #49A99F
XTerm*color7:     #AAAAAA
XTerm*color8:     #666666
XTerm*color9:     #ED6975
XTerm*color10:    #B8ED69
XTerm*color11:    #EDE169
XTerm*color12:    #69B8ED
XTerm*color13:    #ED69B8
XTerm*color14:    #69EDE1
XTerm*color15:    #DDDDDD

xbindkeys
~/.xbindkeysrc

###########################
# xbindkeys configuration #
# Version: 1.8.6
# xbindkeys -k

"dmenu_main"
    m:0x8 + c:40
    Alt + d
"cd && xterm"
    m:0x1 + c:36
    Shift + Return
"cd && xterm"
    m:0x0 + c:102
    Muhenkan

vncboot
先に述べたライブラリパスを前回Real VNCで使ったvncbootのstartに追記、変更します。

start)
        echo "Starting VNC Server"
        #Insert your favoured settings for a VNC session
        #su $USER -c '/usr/bin/vncserver :1'
        su $USER -c 'LD_PRELOAD=/lib/arm-linux-gnueabihf/libgcc_s.so.1 /usr/bin/vncserver :1'
        ;;

ちなみにC shell(tcsh)を使っている(まずいないと思うが)場合はvncbootは変更しないで~/.cshrcに記載します。

# tigervncserver
setenv  LD_PRELOAD /lib/arm-linux-gnueabihf/libgcc_s.so.1

~/.vnc/xstartup

#!/bin/sh
xrdb $HOME/.Xresources
xsetroot -solid gray3
xsetroot -cursor_name left_ptr
vncconfig nowin=1 &
xbindkeys &
sleep 1
dwm &
cd && xterm

~/.vnc/vnc.conf

$geometry     = "1020x655";
$depth        = 24;
$desktopName  = "Raspberry Pi 4";
$localhost    = "no";

HDMI出力をCLI
HDMIには本来のディスクトップが出力されていると思うのでCLIに変更

# systemctl disable lightdm

準備ができたところで再起動、Pi3から接続

$ vncviewer -passwd /home/pi/.vnc/pi4 192.168.0.4:1

dwmのウインドウモード 上部タグナンバーとタイトルバーの間
[ ]= タイル  新しいウインドウは左から
><> フロート アプリケーションのデフォルトサイズで表示
[2] 最大化  右クリック 数値は現在のウインドウ数
デフォルトのタイル、フロートに戻すにはmodキー+ F T

ターミナルを2つ起動
左右の境界線はmodキー+ H modキー+ Lで移動
左右のウインドウ入れ替えはmodキー+ Enter
modキー+ マウス左クリックドラッグでウインドウを表に出せる
隠れたウインドウはmodキー+ J modキー+ Kで表
タグの切り替えはmodキー+ 数字(マウス可)


横分割にしてフロートでターミナル起動
modキー+ マウス左クリックで移動 modキー+ マウス右クリック(右下)を掴んでウインドウサイズ変更

基本はこれくらいしか使っていませんが左手はショートカット、右手は隙あらばマウスを握っているヘタレキーボーダーには充分間に合っています。


デフォルトでインストールされているアプリケーションも問題なく起動します。


lxappearanceとmousepad


プロパティからコマンド名を調べれば微妙なアプリケーションも起動します。

次回は日本語環境を設定していきます。

Raspberry Pi OS (32-bit) with desktop ヘッドレスインストール

Raspberry Pi OS 2020-05-27 がリリースされています。
Raspberry Pi OS (previously called Raspbian) – (以前はRaspbianと呼ばれていました)
RaspbianからRaspberry Pi OSに名称変更になったようです。
明示的に32-bitと謳っているので64-bit版のリリースも近いのでしょうか?
当サイトのRaspberry Pi4は相変わらずHDMIモニタは無いので作業マシン(Raspberry Pi3)からヘッドレスインストールしてみようと思います。

カード作成

# dd if=2020-05-27-raspios-buster-armhf.img of=/dev/sdx bs=1M status=progress


カードは認識したデバイス名で間違えないように!

作成したカードの/bootに空のsshとWiFiでインストールする場合はwpa_supplicant.confを作成しておきます。
wpa_supplicant.confは起動後所定の位置(/etc/wpa_supplicant)に移動記録される
またカードの/etc/dhcpcd.confには固定IPを振っておきます。

/media/boot (/media/bootにマウント)

$ touch ssh

Pi3のwpa_supplicant.confをコピー

$ cp /etc/wpa_supplicant/wpa_supplicant.conf /media/boot

wpa_supplicant.conf(例)

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP

network={
        ssid="xxxxx-xxxxxxx-xxx" # SSID
        psk="xxxxxxxxxxxxxxxxx"  # PASSWORD 
        proto=RSN
        key_mgmt=WPA-PSK
        pairwise=CCMP
        group=CCMP
        priority=2
}

/media/rootfs/etc/dhcpcd.conf (/media/rootfsにマウント)
末尾に追記(ネットワーク帯は各自、interfaceは特に指定なし、有線を接続すれば認識する)

static ip_address=192.168.0.4/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1

カードをセットして起動

初回、起動するまで少し時間がかかります。
Raspberry Pi3からsshで接続、ログインしてvncserverを起動

$ ssh pi@192.168.0.4
$ vncserver


RealVNC serverがスタート、ポート番号は:1(5901)が割り当てられます。
Pi3のデフォルトvncviewerはrealvnc-vnc-viewerですが当サイトではtigervnc-viewerをインストールしています。tigervnc-viewerからはアクセスできないので一旦removeしてrealvnc-vnc-viewerをインストール

# apt remove tigervnc-viewer

realvnc-vnc-viewerをインストール

vnc-viewerを起動してインストール開始


メニュー – インターネット – VNC Viewer
アドレス+ポート番号 192.168.0.4:1


Username pi
Password raspberry


Warning
pi password change
OK


Set up Start


Set Country
Japan


Change Password


Next


Select WiFi Network
wpa_supplicant.confで設定したSSIDを選択


Update Software
通常は多少時間がかかるのですがリリースしたばかり(更新ファイルが少ない)なので割合早い


Setup Complete
ここでrestartするとvncserverが起動していないのでvncviewerからは再接続できません。

自動起動設定をします。

/etc/init.d/vncboot 作成

#! /bin/sh    

### BEGIN INIT INFO
# Provides: vncboot
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start VNC Server at boot time
# Description: Start VNC Server at boot time.
### END INIT INFO

# /etc/init.d/vncboot

USER=pi
HOME=/Home/pi

export LANG='ja_JP.UTF-8'
export USER HOME

case "$1" in
    start)
        echo "Starting VNC Server"
        #Insert your favoured settings for a VNC session
        su $USER -c '/usr/bin/vncserver :1'
        ;;

    stop)
        echo "Stopping VNC Server"
        su $USER -c '/usr/bin/vncserver -kill :1'
        ;;

    *)
        echo "Usage: /etc/init.d/vncboot {start|stop}"
        exit 1
        ;;
esac

exit 0

実行権限を付けてenable、リブート

# chmod 755 vncboot
# systemctl enable vncboot
# reboot


再度接続
パスワードを変更したので再度聞かれます。Remember Passwordにチェックを入れたほうがいいでしょう


起動しました。カーソルがXデフォルトの”X“形状になっています。ターミナルから

$ xsetroot -cursor_name left_ptr

を実行すると通常の矢印になるのですがReal VNCではどこで設定するのかわかりません。
取り敢えず.bashrcに上記のコマンドを書いておくとターミナルを起動した時点でカーソルが変わります。
UIは変更する予定です。

Top