Raspberry Pi OS (32-bit) with desktop CUPS Server

今回はRaspberry Pi4にプリンタを接続、ローカルのネットワークプリンタ(CUPS Server)として設定してみます。

プリンタは相変わらずの激安プリンタCanon iP2700を接続、Pi4から印刷そしてローカルのマシンはRaspberry Pi3,Windows(ASUS X200MA)からの印刷を試してみたいと思います。

Canon iP2700

iP2700も旧品番となってしまいました。

$ lsusb
Bus 001 Device 003: ID 04a9:10d3 Canon, Inc.

CUPS

# apt install cups

cupsを設定するためにユーザーをlpadminに加えます。

$ sudo gpasswd -a pi lpadmin
ユーザ pi をグループ lpadmin に追加
$ id pi
uid=1000(pi) gid=1000(pi) groups=1000(pi),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),105(input),109(netdev),999(spi),998(i2c),997(gpio),121(lpadmin)

Pi4のwebブラウザからアクセス

http://localhost:631/


外部からアクセスする時は
hostname:631
ipaddress:631


管理 パスワード入力


プリンターの追加 Canon iP2700


名前 説明 場所 適当に
共有 チェック
続ける


モデルを選んでプリンターの追加


デフォルトオプションの設定 クリック


プリンターが追加されて待機中の画面になります。
メンテナンスからテストページの印刷ができます。

CUPS 設定ツール system-config-printer

CUPSの状態はsystem-config-printerからもみれます。

# apt install system-config-printer


vncserver上では制約があります。
プロパティはダブルクリックすると現れます。
デバイスURl: usb://Canon/iP2700%20series?serial=39AE02
製造元とモデル: Canon iP2700 series – CUPS+Gutenprint v5.3.1
ここまでPi4からは印刷可能ですが外部のマシンからは印刷できません。

ネットワークプリンター

外部のマシンから印刷を許可するためにcupsd.confを編集します。
16行目 Listen localhost:631
デフォルトはローカルホストからのみ印刷を受ける設定になっています。
Port 631とすることで外部からもListenします。
その他 Location のアクセス設定がありますが取り敢えず4箇所とも許可しました。
/etc/cups/cupsd.conf (変更箇所)

# Only listen for connections from the local machine.
Port 631
Listen /run/cups/cups.sock

# Restrict access to the server...
<Location />
  Order allow,deny
  Allow @Local
</Location>

# Restrict access to the admin pages...
<Location /admin>
  Order allow,deny
  Allow @Local
</Location>

# Restrict access to configuration files...
<Location /admin/conf>
  AuthType Default
  Require user @SYSTEM
  Order allow,deny
  Allow @Local
</Location>

# Restrict access to log files...
<Location /admin/log>
  AuthType Default
  Require user @SYSTEM
  Order allow,deny
  Allow @Local
</Location>

cups再スタート

# systemctl restart cups

cupsクライアント

クライアント側も同様にcupsとsystem-config-printerをインストール

# apt install cups system-config-printer
# gpasswd -a pi lpadmin


Pi3からsystem-config-printerを起動するとプリンターが見えています。(印刷可能)


デバイスURl: implicitclass://Canon_iP2700_series_pi4/
製造元とモデル: Remote printer: Canon iP2700 series – CUPS+Gutenprint v5.3.1
cupsを新規にインストールするとcupsのバックエンドで動いている何かが自動でimplicitclassを設定するようです。


プリンターを削除したり既存のsystem-config-printerから新たに追加する場合はimplicitclassは見当たらない(設定できない?)
ロックを解除してADD
ネットワークプリンターを検索。
自動で検出しているDNS-SD経由のプリンターはRemote printerとして認識してくれません。
ホスト名にホストネームかIPアドレスを入れてFind


ippで接続します。


プリンター登録
印刷OK


OSによって表示は多少違いますがRaspberryではRemote printerとして表示(認識)してないとネットワークプリンターには接続できないようです。


WindowsではCanonのドライバーを入れた記憶があります。
あとはBonjour Print Servicesをインストール、実行することですぐつながるはずです。

Pi4-プリンター間は2m位離れているのでUSB延長ケーブルでつないでいます。
これまではPi1BをCUPSサーバーにしていたのですがWindowsからの印刷速度は早いのですがRaspberryからは遅い。やはりメーカー製ドライバーの違いでしょうか!
Pi4では馬力があるせいかずいぶん改善しました。

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


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

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

Top