NetBSDでdevpubd(8)を使ってみる

これは、NetBSD Advent Calendar 2020の12日目の記事です。

はじめに

USB接続のEthernetアダプター(cdce(4))を使っています。 これをUSBレセプタクルに挿した時に、自動的にIPv6のユニークローカルアドレスを割り当ててくれると大変助かると考えていました。 どうやら、devpubd(8)というデーモンを使うと、うまく行くのかもしれないと考えて試してみました。

devpubd(8)を実行してみる

devpubd(8)をフォアグラウンドで動かしてみて、cdce(4) USB Ethernetアダプターを挿した際にどのように動作するのか確認してみましょう。

# devpubd -f
devpubd_eventloop: event='device-attach', device='uhub4'
devpubd_eventloop: event='device-attach', device='uhub5'
devpubd_eventloop: event='device-attach', device='cdce0'

これで、イベントはdevice-attachで、 デバイスはcdce0であることが分かりました。

devpubd(8)が実行するスクリプトを用意する

devpubd(8)には 1つ目のcdce(4)であるcdce0が認識された時にだけ実行して欲しいので、 以下のようなスクリプトを/libexec/devpubd-hooks/03-cdce-ipv6 に置くことにしました。

#!/bin/sh
#
# $NetBSD$
#
# Assign IPv6 address for local connection when cdce0 is detected.
#

event="$1"
shift
devices=$@

for device in $devices; do
	case $device in
	cdce0)
		case $event in
		device-attach)
			ifconfig $device inet6 fd00:5100::1/64 
			;;
		device-detach)
			;;
		esac
		;;
	esac
done

これで、cdce(4)デバイスを最初に挿した際に自動的に設定がされて非常に便利になりました。

NetBSDでJupyter Notebookを使ってみる

これは、NetBSD Advent Calendar 2020の11日目の記事です。

はじめに

Jupyter Notebookを利用するのは、NetBSDに限定された話ではありませんが、実施に利用している話を私は聞いたことがありませんでした。 おそらくGPUを利用した機械学習などはサポートされていないと思いますが、基本的な機能を利用しているので、それについて書きたいと思います。

Jupyter Notebookをインストールする

Jupyter Notebookは、pkgsrc/www/py-notebookとしてpkgsrcのパッケージになっています。ちょっと分かりにくい名前です。 以下のようにインストールします。 ウェブインターフェイスを利用しますので、pkgsrc/www/firefoxもインストールしておきます。

# cd /usr/pkgsrc/www/py-notebook
# make install
# cd /usr/pkgsrc/www/firefox-l10n
# make install

併用するパッケージも追加でインストールする

私は、数式処理とグラフの表示をしたいので、 pkgsrc/math/py-sympyと pkgsrc/graphics/py-matplotlibを追加でインストールしました。 以下のようにインストールします。

# cd /usr/pkgsrc/math/py-sympy
# make install
# cd /usr/pkgsrc/graphics/py-matplotlib
# make install

Jupyter Notebookを起動してみる

pkgsrcのPythonモジュールのパッケージは、各バージョンのPython毎にインストールされるようになっています。 ですので、標準的にはjupyter-notebook-3.8のように3.8の部分に利用するPythonのバージョン が追加されたコマンドとしてインストールされます。

ですので、一般的なJupyter Notebookの起動コマンドでは起動できません。 以下のようになってしまいます。

$ jupyter notebook
sh: jupyter: not found

正解は、利用するPythonのバージョンを付けて、以下のように起動します。

$ jupyter-3.8 notebook-3.8

あるいは、以下のように起動しても良いでしょう。

$ jupyter-notebook-3.8

いずれの方法でもhttp://localhost:8888/ のウェブインターフェイス画面が自動的にFirefoxで開かれます。

NetBSDでネットワークスキャナーを使ってみる

これは、NetBSD Advent Calendar 2020の9日目の記事です。

はじめに

IPP Everywhereに対応したEPSON EW-M752Tというカラーインクジェットプリンターと書いていましたが、 正確にはスキャナー機能もついた複合機です。 このスキャナー機能も、独自のスキャナーデバイスドライバーを利用せずにApple AirScanやWSDという仕組みでスキャンできるようです。 今回は、pkgsrc/graphics/sane-airscanを使ってスキャンしてみます。

pkgsrc/graphics/sane-airscanをインストールする

以下のようにインストールします。 sane-airscanは、SANE (pkgsrc/graphics/sane-backends)というUnix-like OSで一般的なスキャナーを扱う仕組みのバックエンドです。

# cd /usr/pkgsrc/graphics/sane-airscan
# make install

スキャナーを認識させる

scanimageコマンドでスキャナーを一覧表示させることができます。 以下のように認識されました。 avahiデーモンも起動しておく必要があります。

# /etc/rc.d/avahidaemon start
$ scanimage -L
device `epson2:net:10.81.0.149' is a Epson PID flatbed scanner
device `airscan:e1:EPSON EW-M752T Series' is a eSCL EPSON EW-M752T Series ip=10.81.0.149

airscanというのが今回利用しようとしているデバイスです。これで利用できるオプションも調べておきましょう。

$ scanimage --help -d airscan
Usage: scanimage [OPTION]...

Start image acquisition on a scanner device and write image data to
standard output.

Parameters are separated by a blank from single-character options (e.g.
-d epson) and by a "=" from multi-character options (e.g. --device-name=epson).
-d, --device-name=DEVICE   use a given scanner device (e.g. hp:/dev/scanner)
    --format=pnm|tiff|png|jpeg  file format of output file
-i, --icc-profile=PROFILE  include this ICC profile into TIFF file
-L, --list-devices         show available scanner devices
-f, --formatted-device-list=FORMAT similar to -L, but the FORMAT of the output
                           can be specified: %d (device name), %v (vendor),
                           %m (model), %t (type), %i (index number), and
                           %n (newline)
-b, --batch[=FORMAT]       working in batch mode, FORMAT is `out%d.pnm' `out%d.tif'
                           `out%d.png' or `out%d.jpg' by default depending on --format
                           This option is incompatible with --output-file.    --batch-start=#        page number to start naming files with
    --batch-count=#        how many pages to scan in batch mode
    --batch-increment=#    increase page number in filename by #
    --batch-double         increment page number by two, same as
                           --batch-increment=2
    --batch-print          print image filenames to stdout
    --batch-prompt         ask for pressing a key before scanning a page
    --accept-md5-only      only accept authorization requests using md5
-p, --progress             print progress messages
-o, --output-file=PATH     save output to the given file instead of stdout.
                           This option is incompatible with --batch.
-n, --dont-scan            only set options, don't actually scan
-T, --test                 test backend thoroughly
-A, --all-options          list all available backend options
-h, --help                 display this help message and exit
-v, --verbose              give even more status messages
-B, --buffer-size=#        change input buffer size (in kB, default 32)
-V, --version              print version information

Options specific to device `airscan':
  Standard:
    --resolution 100|200|300|600|1200dpi [300]
        Sets the resolution of the scanned image.
    --mode Color|Gray [Color]
        Selects the scan mode (e.g., lineart, monochrome, or color).
    --source Flatbed [Flatbed]
        Selects the scan source (such as a document-feeder).
  Geometry:
    -l 0..215.9mm [0]
        Top-left x position of scan area.
    -t 0..297.18mm [0]
        Top-left y position of scan area.
    -x 0..215.9mm [215.9]
        Width of scan-area.
    -y 0..297.18mm [297.18]
        Height of scan-area.
  Enhancement:
    --brightness -100..100% (in steps of 1) [0]
        Controls the brightness of the acquired image.
    --contrast -100..100% (in steps of 1) [0]
        Controls the contrast of the acquired image.
    --shadow 0..100% (in steps of 1) [0]
        Selects what radiance level should be considered "black".
    --highlight 0..100% (in steps of 1) [100]
        Selects what radiance level should be considered "white".
    --analog-gamma 0.0999908..4 [1]
        Analog gamma-correction
    --negative[=(yes|no)] [no]
        Swap black and white

Type ``scanimage --help -d DEVICE'' to get list of all options for DEVICE.

List of available devices:
    epson2:net:10.81.0.149 airscan:e1:EPSON EW-M752T Series

特に、スキャンモードはカラーがグレースケールしかないので注意してください。

スキャンしてみる

TIFFファイルにカラーでスキャンしてみるには、以下のようにします。

$ scanimage --format=tiff -d airscan --mode Color > color-scanned.tiff

TIFFファイルにグレースケールでスキャンしてみるには、以下のようにします。

$ scanimage --format=tiff -d airscan --mode Gray > grayscale-scanned.tiff

スキャンした画像も、素直な感じなので常用できそうです。

NetBSDからcups経由で印刷する (3/3)

これは、NetBSD Advent Calendar 2020の6日目の記事です。

はじめに

PDFファイル出力をする仮想プリンター、PostScriptプリンターをcupsから使う方法を 説明して来ました。 今日は、IPP Everwhere対応のEPSON EW-M752Tというカラーインクジェットプリンターを へ印刷してみたいと思います。

IPP Everywhereとは

IPP Everywhereとは、スマートフォンから印刷するために用意されている仕組みである ようです。 独自のプリンタードライバーなしで印刷できる仕組みです。 長年GhostScriptが対応していないと、NetBSDから印刷できず苦労して来た訳です。 独自のプリンタードライバーなしにできるのだったら、もっと早く対応して欲しかったと 思わないではいられません…。 共通フォーマットの画像ファイルをHTTPベースのプロトコルで送って印刷するようです。

CUPSは、IPP Everwhereの対応を内蔵しています。 ですので、このシリーズの初日の記事 に加えてインストールする必要はありません。 ちなみに、今回利用している環境では、cups-baseのavahiオプションは有効にしていません。

Bonjourを利用するか、ippのURIを直接指定するか

mdnsdを起動させていれば、IPP Everywhere対応のプリンターは自動的に認識され、アプリケーションの印刷指示画面 に表示されます。 しかし、今回試した範囲では、うまくプリンターが準備完了状態と認識されませんでした。 ですので、ipp://で始まるURIを直接指定してプリンターを手動で追加することにしました。

IPP EverywhereのプリンターのURIを調べる

mdnsdを起動させた上で、ippfindを実行することで、IPP Everywhere対応のプリンターのURIに近いものを 表示させることができます。今回は、ipp://EPSON5D53C1.local:631/ipp/printという結果が得られました。 しかし、このままのEPSON5D53C1.localと言うホスト名では参照できませんので、IPアドレスまたは名前解決できるホスト名に 読み替えておきます。 今回は、LAN内でDDNS設定がされている環境なので、ipp://EPSON5D53C1.elements.tetera.org:631/ipp/print と読み替えました。 /ipp/printの部分を把握するのが肝心ですから、 pkgsrc/sysutils/avahiをインストールし、avahidaemonを起動した上で、avahi-browse -r -aを実行して確認するのでも良いかもしれません。 rp=ipp/printの部分を見れば良いようです。

# /etc/rc.d/mdnsd onestart
$ ippfind
ipp://EPSON5D53C1.local:631/ipp/print
# /etc/rc.d/avahidaemon onestart
$ avahi-browse -r -a
=  cdce0 IPv4 EPSON EW-M752T Series                         _ipp._tcp
 local
   hostname = [EPSON5D53C1.local]
   address = [10.81.0.149]
   port = [631]
l=http://EPSON5D53C1.local.:80/PRESENTATION/BONJOUR" "priority=30" "mopria-certified=2.0" "URF=CP1,PQ4-5,OB9,OFU0,RS360,SRGB24,W8,DM3,IS1-18,V1.4,MT1-3-5-8-11-12" "PaperMax=legal-A4" "kind=document,envelope,label,photo,postcard" "Fax=F" "Scan=T" "Duplex=T" "Color=T" "qtotal=1" "rp=ipp/print" "pdl=application/octet-stream,image/pwg-raster,image/urf,image/jpeg,application/vnd.epson.escpr" "product=(EPSON EW-M752T Series)" "usb_MDL=EW-M752T Series" "usb_MFG=EPSON" "ty=EPSON EW-M752T Series" "txtvers=1"]

プリンターを追加する

以下のような手順で、プリンターを追加して行きます。

http://localhost:631/ を開き、Administrationリンクから管理画面を開きます。Add Printerボタンをクリックします。

INternet Pronting Protocol (ipp)のラジオボタンを選択し、Continueボタンをクリックします。

Connection欄にさきほど求めておいたURIを入力します。今回は、ipp://EPSON5D53C1.elements.tetera.org:631/ipp/printです。その上でContinueボタンをクリックします。

Name、Description、Locationを入力します。

MakeとしてEPSONを選択し、Continueボタンをクリックします。

ModelとしてIPP Everywhereを選択しAdd Printerボタンをクリックします。

オプションは提案されたままにしました。Set Default Optionsボタンをクリックします。

これでプリンターを追加できました。

印刷してみる

今回は、pkgsrc/www/firefoxから印刷してみました。 無事にカラー印刷できました。

おわりに

これで、PDFファイル出力の仮想プリンター、PostScriptプリンター、 IPP Everwhere対応のプリンターをCUPSから使えるプリンターとして登録することが できました。 IPP Everwhereに対応できたことで、NetBSDから年賀状を印刷することもできそうです。

NetBSDからcups経由で印刷する (2/3)

これは、NetBSD Advent Calendar 2020の4日目の記事です。

はじめに

昨日は PDFファイルを生成する仮想プリンターを使えるようにしました。 今日は、同じcups環境で、Lexmark MS314dnというモノクロPostScriptレーザープリンターを 使えるようにしていきます。

cupsのインストールは、昨日で完了していますので、引き続き設定していきます。 追加でインストールするパッケージはありません。

プリンターを追加する

以下のような手順でプリンターを追加していきます。

http://localhost:631/ をcupsdの起動しているのと同じホストのpkgsrc/www/firefoxで開き、Administrationリンクをクリックした上で、Find New Printersボタンをクリックします。

Lexmark MS310dnであることを確認した上で、Add This Printerボタンをクリックします。

設定を変更する必要はないので、Continueボタンをクリックします。Localtionは変えておいた方が良かったかもしれませんが…。

MakeとしてGenericを選択して、Continueボタンをクリックします。 PPDファイルがLexmarkから提供されていますが、バージョン1.2も1.4も今回の環境では利用できません。

Modelとして、Generic PostScript Printerを選択し、Add Printerボタンをクリックします。

既定値を設定しておきます。変更する必要はないでしょう。

これでプリンターを追加できました。

印刷してみる

今回はpkgsrc/misc/libreofficeのlowriterから印刷してみました。

エラーになる場合には、印刷時のlowriterの用紙サイズがプリンターにセットされている用紙 サイズと一致していることを確認すると良いかもしれません。

NetBSDからcups経由で印刷する (1/3)

これは、NetBSD Advent Calendar 2020の3日目の記事です。

はじめに

2017年に購入したLexmark MS314dnというPostScriptプリンターがあります。 NetBSDでは、これまではlpd(8)とlp(1)を使って印刷して来ました。 また、最近、IPP Everywhereに対応したエプソンEW-M752Tも購入しました。

ですが、さすがに最近はcups経由で印刷するものだと思います。 ここから3回に分けて、cupsをNetBSDで使って印刷する記事を書きたいと思います。

今回は、まずはcups経由で印刷してPDFファイルを生成する仮想プリンターを使ってみます。 ただし、LibreOfficeもFirefoxもPDFファイルを生成する機能はありますので、 あまり有用ではないかもしれません。

必要なパッケージをインストールする

cupsの設定は、http://localhost:631/ にアクセスして実施します。 その前に、以下を実施しておく必要があります。

  • pkgsrc/print/cups-baseをインストールします。このパッケージにcupsdデーモンであるcupsdが含まれています。
  • pkgsrc/print/cups-filtersをインストールします。これにより、PostScriptファイルを入力ファイルとすることができます。
  • pkgsrc/print/cups-pdfをインストールします。これにPDFファイルを出力する仮想プリンターが含まれています。
  • cupsdを起動させます。

pkgsrc/print/cups-baseをインストールする

まずは、pkgsrc/print/cups-baseをインストールし、rcスクリプトも 配置します。 以下のように実行すれば良いでしょう。

# cd /usr/pkgsrc/print/cups-base
# make install
# cp /usr/pkg/share/examples/rc.d/cupsd /etc/rc.d

その上で、cupsデーモンをブート時に起動するように設定します。

# vi /etc.rc.conf
(略)
cupsd=YES
(略)

pkgsrc/print/cups-filtersをインストールする

以下のように実行すればインストールできます。 特に設定はないようです。

# cd /usr/pkgsrc/print/cups-filters
# make install 

pkgsrc/print/cups-pdfをインストールする

以下のように実行すればインストールできます。 cups-pdf-3.0.1より前のバージョンはインストールされたモジュールのパーミッションの関係で 正常に動かないようです。

# cd /usr/pkgsrc/print/cups-pdf
# make install 

cupsdを起動させる

既にブート時にcupsdは起動するようになっていますが、手動で起動させてます。

# /etc/rc.d/cupsd start
Starting cupsd.

cupsのウェブインターフェイス画面で設定する

以下のような手順で設定していきます。

http://localhost:631/ をcupsdの起動しているのと同じホストのpkgsrc/www/firefoxで開きます。

AdministrationリンクをクリックしAdd Printerボタンをクリックします。

Local PrintersにCUPS-PDFが表示されていることを確認して、ラジオボタンで選択し、Continueボタンをクリックします。

次の画面では、特に変更する必要はないので、そのままContinueボタンをクリックします。

Makeでは、Genericを選択しContinueボタンをクリックします。

Modelでは、Generic CUPS-PDF Printer (no option)を選択し、Add Printerボタンをクリックします。

既定値の設定をしますが、A4紙サイズ、出力300 DPIで設定し、Set Default Optionsボタンをクリックします。

この画面まで来たら、仮想プリンターの追加は完了です。

生成されたPDFファイルを確認する

PDFファイルは、/var/spool/cups-pdf/自分のユーザー名 に生成されます。 ここでは、Firefoxで印刷してみました。

$ ls -la /var/spool/cups-pdf/ryoon
total 1064
drwx------  2 ryoon  users     512 Dec  4 20:03 .
drwxr-xr-x  4 root   wheel     512 Nov 26 18:58 ..
-rw-------  1 ryoon  users  519728 Dec  4 20:03 NetBSD_Advent_Calendar_2020_-_Qiita.pdf

pkgsrc/print/mupdfで表示させてみました。

文化庁の自由利用マーク

文化庁の自由利用マーク というのがあって、 ITmediaの記事「文化庁、CCライセンスを支援へ 独自ライセンス構築は断念」 によると、2013年の時点で普及はあきらめているらしい。 文化庁のウェブページを見ても、そもそも「コピーOK」「障害者OK」「学校教育OK」とい...