<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
	<title><![CDATA[ タグ「Raspberry Pi」を含む投稿［9件］ - でんげき☆ Network Service ]]></title>
	<link>https://room.dengeki.jp/tegalog.cgi</link>
	<description><![CDATA[ Raspberry Pi 4 で運用実験中 ]]></description>
	<language>ja</language>
	<copyright>Copyright 2025</copyright>
	<lastBuildDate>Thu, 05 Jun 2025 14:05:45 +0900</lastBuildDate>
	<generator><![CDATA[ <!-- てがろぐ Version: -->Powered by <a href="https://www.nishishi.com/cgi/tegalog/" rel="noreferrer" target="_top">てがろぐ</a> Ver 4.4.5 ]]></generator>
	<!-- BEGIN ENTRIES -->
	<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ 続・モニタ無しでラズパイを VNC 接続できるとこまでセット… ]]></title>
	<description><![CDATA[ 続・モニタ無しでラズパイを VNC 接続できるとこまでセットアップする<br /><img class="embeddedimage " width="400" height="400" src="https://room.dengeki.jp/images/20220429192311-admin.png" alt="20220429192311-admin.png"><br />　<br />以前に <span class="decorationM" style="background-color:lightcyan;"><a href="https://room.dengeki.jp/tegalog.cgi?postid=2" class="postidlink">完全モニタ無しで Raspberry Pi 4 を VNC 接続できるとこまでセットアップするメモ</a></span> なんてのを紹介していたんだけど…それから月日が流れ <a class="url labeledlink" href="https://www.raspberrypi.com/software/operating-systems/" rel="noopener noreferrer" target="_blank">Raspberry Pi OS</a> のバージョンが上がったっていうか色々とセットアップ方法が変更になったんでその辺をざっくり検証してみましたってメモです<br /><br /><img class="embeddedimage " width="1422" height="800" src="https://room.dengeki.jp/images/20220429185131-admin.jpg" alt="20220429185131-admin.jpg"> <img class="embeddedimage " width="900" height="675" src="https://room.dengeki.jp/images/202204291851316-admin.png" alt="202204291851316-admin.png"><br />そんな今回は某案件的な話で貸与して頂けた <a class="url labeledlink" href="https://www.raspberrypi.com/products/raspberry-pi-400/" rel="noopener noreferrer" target="_blank">Raspberry Pi 400</a> を使用して <span class="decorationC" style="color:red;">64-bit 版</span>の <span class="decorationC" style="color:red;">Raspberry Pi OS with desktop</span> をモニタ無しっていうか SSH でログインしつつの VNC 接続できる所まで試してみました<br /><br />今回の <a class="url labeledlink" href="https://www.raspberrypi.com/software/operating-systems/" rel="noopener noreferrer" target="_blank">Raspberry Pi OS</a> のバージョンアップの大きな変更っていうか…今までデフォルトで「pi」ってユーザが用意されていたのが今回からそれが廃止になったようです　それに伴いパスワードを設定したユーザが不在(？)って事になり <span class="decorationC" style="color:green;">dd</span> コマンドなりでイメージを書き込んだ後に boot パーティションのルートフォルダにファイル名が「ssh」もしくは「ssh.txt」のファイルを新規作成しただけでは SSH でログインできなくなってました<br /><br /><img class="embeddedimage " width="682" height="449" src="https://room.dengeki.jp/images/202204291851315-admin.png" alt="202204291851315-admin.png"><br />それじゃどうしよう？って話なんですが…まぁ結果から云うとそれをどうにかする機能が追加された新しい <a class="url labeledlink" href="https://www.raspberrypi.com/software/" rel="noopener noreferrer" target="_blank">Raspberry Pi Imager</a> を使うって事らしいです<br />これの右下にある「歯車」のマークをクリックすると…<br /><br /><img class="embeddedimage " width="677" height="827" src="https://room.dengeki.jp/images/202204291851314-admin.png" alt="202204291851314-admin.png"><br />「詳細な設定」として Pi OS の諸々の設定ができるようになります　ユーザの設定だけでなく SSH の有効化や Wi-Fi の設定も一気に行えるんでこれは便利ですね！(&gt;_&lt;)ｗ<br /><br />　　：<br /><br />・・とまぁこれで話が終わっちゃうのも少々物足りない気がしたっていうか Pi Imager を使うことなくそれらの設定をどうにかする手法を模索してみました<br />まずはイメージファイルを <span class="decorationC" style="color:green;">dd</span> なりで書き込んだものと Pi Imager を使って書き込んだものを比較してみました　その結果 /boot/cmdline.txt に変更が加えられてたのと /boot/firstrun.sh が生成されていた事が判りました<br /><br />それでは /boot/cmdline.txt から見ていきましょう<br /><br />----- オリジナルの /boot/cmdline.txt -----<br />console=serial0,115200 console=tty1 <span class="decorationC" style="color:blue;">root=PARTUUID=50a67c3e-02</span> rootfstype=ext4 fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh splash plymouth.ignore-serial-consoles<br />----------<br /><br />----- Pi Imager が作った /boot/cmdline.txt -----<br />console=serial0,115200 console=tty1 <span class="decorationC" style="color:blue;">root=PARTUUID=50a67c3e-02</span> rootfstype=ext4 fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh splash plymouth.ignore-serial-consoles <span class="decorationC" style="color:red;">systemd.run=/boot/firstrun.sh systemd.run_success_action=reboot systemd.unit=kernel-command-line.target</span><br />----------<br /><br />これを見る限り Pi Imager を使わずにどうにかする時にはオリジナルの /boot/cmdline.txt の末尾に <span class="decorationC" style="color:red;"> systemd.run=/boot/firstrun.sh systemd.run_success_action=reboot systemd.unit=kernel-command-line.target</span> を付ければよさそうです<br /><br />ただし「<span class="decorationC" style="color:blue;">root=PARTUUID=50a67c3e-02</span>」の部分ですかね…これは配布されるディスクイメージのバージョン毎に異なる値を設定する必要があるようです<br />その辺の PARTUUID を調べるには <span class="decorationC" style="color:green;">lsblk</span> コマンドを使うといいらしい？　試しに実際に USB メモリに書き込んだものと…ディスクイメージを直接マウントしたものとで確認してみました<br /><br />$ <span class="decorationC" style="color:green;">lsblk -o TYPE,KNAME,PARTUUID,LABEL,SIZE,VENDOR</span><br />TYPE KNAME&nbsp; &nbsp; PARTUUID&nbsp; &nbsp; LABEL&nbsp; &nbsp; SIZE VENDOR<br />disk sdg&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;29.9G silicon <br />part sdg1&nbsp; &nbsp; &nbsp;50a67c3e-01 boot&nbsp; &nbsp; &nbsp;256M <br />part sdg2&nbsp; &nbsp; &nbsp;<span class="decorationC" style="color:red;">50a67c3e-02</span> rootfs&nbsp; &nbsp;3.7G <br />rom &nbsp;sr0&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;1024M HL-DT-ST<br />part loop39p1 50a67c3e-01 boot&nbsp; &nbsp; &nbsp;256M <br />part loop39p2 <span class="decorationC" style="color:red;">50a67c3e-02</span> rootfs&nbsp; &nbsp;3.7G <br /><br />これを見る限り /rootfs に設定された PARTUUID をコピペすればいいようですね　この辺は <span class="decorationC" style="color:green;">dd</span> なりでイメージを書き込んだ場合には気にする必要はなさそうだけど /boot/cmdline.txt を全て自作で用意したいような場合には気をつけたほうがいいのかな？って思いました<br /><br />　　：<br /><br />お次は /boot/firstrun.sh です　長くてややこしいですが頑張って見ていきましょう<br /><br />----- Pi Imager が作った /boot/firstrun.sh -----<br />&#35;!/bin/bash<br /><br />set +e<br /><br />CURRENT_HOSTNAME=`cat /etc/hostname | tr -d &quot; \t\n\r&quot;`<br />echo <span class="decorationC" style="color:red;">HostName</span> &gt;/etc/hostname<br />sed -i &quot;s/127.0.1.1.*$CURRENT_HOSTNAME/127.0.1.1\t<span class="decorationC" style="color:red;">HostName</span>/g&quot; /etc/hosts<br />FIRSTUSER=`getent passwd 1000 | cut -d: -f1`<br />FIRSTUSERHOME=`getent passwd 1000 | cut -d: -f6`<br />if &#91; -f /usr/lib/userconf-pi/userconf &#93;; then<br />&nbsp; &nbsp;/usr/lib/userconf-pi/userconf &apos;<span class="decorationC" style="color:red;">UserName</span>&apos; &apos;<span class="decorationC" style="color:red;">$5$Salt$xxxxxxxxxx..</span>&apos;<br />else<br />&nbsp; &nbsp;echo &quot;$FIRSTUSER:&quot;&apos;<span class="decorationC" style="color:red;">$5$Salt$xxxxxxxxxx..</span>&apos; | chpasswd -e<br />&nbsp; &nbsp;if [ &quot;$FIRSTUSER&quot; != &quot;<span class="decorationC" style="color:red;">UserName</span>&quot; ]; then<br />&nbsp;&nbsp; &nbsp; &nbsp;usermod -l &quot;<span class="decorationC" style="color:red;">UserName</span>&quot; &quot;$FIRSTUSER&quot;<br />&nbsp;&nbsp; &nbsp; &nbsp;usermod -m -d &quot;/home/<span class="decorationC" style="color:red;">UserName</span>&quot; &quot;<span class="decorationC" style="color:red;">UserName</span>&quot;<br />&nbsp;&nbsp; &nbsp; &nbsp;groupmod -n &quot;<span class="decorationC" style="color:red;">UserName</span>&quot; &quot;$FIRSTUSER&quot;<br />&nbsp;&nbsp; &nbsp; &nbsp;if grep -q &quot;^autologin-user=&quot; /etc/lightdm/lightdm.conf ; then<br />&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;sed /etc/lightdm/lightdm.conf -i -e &quot;s/^autologin-user=.*/autologin-user=<span class="decorationC" style="color:red;">UserName</span>/&quot;<br />&nbsp;&nbsp; &nbsp; &nbsp;fi<br />&nbsp;&nbsp; &nbsp; &nbsp;if &#91; -f /etc/systemd/system/getty@tty1.service.d/autologin.conf &#93;; then<br />&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;sed /etc/systemd/system/getty@tty1.service.d/autologin.conf -i -e &quot;s/$FIRSTUSER/<span class="decorationC" style="color:red;">UserName</span>/&quot;<br />&nbsp;&nbsp; &nbsp; &nbsp;fi<br />&nbsp;&nbsp; &nbsp; &nbsp;if &#91; -f /etc/sudoers.d/010_pi-nopasswd &#93;; then<br />&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;sed -i &quot;s/^$FIRSTUSER /<span class="decorationC" style="color:red;">UserName</span> /&quot; /etc/sudoers.d/010_pi-nopasswd<br />&nbsp;&nbsp; &nbsp; &nbsp;fi<br />&nbsp; &nbsp;fi<br />fi<br />systemctl enable ssh<br />cat &gt;/etc/wpa_supplicant/wpa_supplicant.conf &lt;&lt;&apos;WPAEOF&apos;<br />country=JP<br />ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev<br />ap_scan=1<br /><br />update_config=1<br />network={<br />&nbsp; &nbsp;ssid=&quot;<span class="decorationC" style="color:red;">Wi-Fi_SSID</span>&quot;<br />&nbsp; &nbsp;psk=<span class="decorationC" style="color:red;">0123456789abcdefxxxx..</span><br />}<br /><br />WPAEOF<br />chmod 600 /etc/wpa_supplicant/wpa_supplicant.conf<br />rfkill unblock wifi<br />for filename in /var/lib/systemd/rfkill/*:wlan ; do<br />&nbsp; echo 0 &gt; $filename<br />done<br />rm -f /etc/localtime<br />echo &quot;Asia/Tokyo&quot; &gt;/etc/timezone<br />dpkg-reconfigure -f noninteractive tzdata<br />cat &gt;/etc/default/keyboard &lt;&lt;&apos;KBEOF&apos;<br />XKBMODEL=&quot;pc105&quot;<br />XKBLAYOUT=&quot;jp&quot;<br />XKBVARIANT=&quot;&quot;<br />XKBOPTIONS=&quot;&quot;<br /><br />KBEOF<br />dpkg-reconfigure -f noninteractive keyboard-configuration<br />rm -f /boot/firstrun.sh<br />sed -i &apos;s| systemd.run.*||g&apos; /boot/cmdline.txt<br />exit 0<br />----------<br /><br />この中で書き換えるべき点はホストネームとなる <span class="decorationC" style="color:red;">HostName</span> と作成するユーザ名 <span class="decorationC" style="color:red;">UserName</span> ＆ パスワード <span class="decorationC" style="color:red;">$5$Salt$xxxxxxxxxx..</span> と Wi-Fi に接続するための <span class="decorationC" style="color:red;">Wi-Fi_SSID</span> ＆パスワード <span class="decorationC" style="color:red;">0123456789abcdefxxxx..</span> の箇所でしょうか<br />その辺を踏まえた上で…もちっと再設定しやすいように改変してみました<br /><br />----- 改変版 /boot/firstrun.sh -----<br />#!/bin/bash<br /><br />USER=&apos;<span class="decorationC" style="color:red;">UserName</span>&apos;<br />PASS=&apos;<span class="decorationC" style="color:red;">$5$Salt$xxxxxxxxxx..</span>&apos;<br />WIFISSID=&apos;<span class="decorationC" style="color:red;">Wi-Fi_SSID</span>&apos;<br />WIFIPASS=&apos;<span class="decorationC" style="color:red;">0123456789abcdefxxxx..</span>&apos;<br />HOST=&apos;<span class="decorationC" style="color:red;">HostName</span>&apos;<br /><br />set +e<br /><br />CURRENT_HOSTNAME=`cat /etc/hostname | tr -d &quot; \t\n\r&quot;`<br />echo $HOST &gt;/etc/hostname<br />sed -i &quot;s/127.0.1.1.*$CURRENT_HOSTNAME/127.0.1.1\t$HOST/g&quot; /etc/hosts<br />FIRSTUSER=`getent passwd 1000 | cut -d: -f1`<br />FIRSTUSERHOME=`getent passwd 1000 | cut -d: -f6`<br />if &#91; -f /usr/lib/userconf-pi/userconf &#93;; then<br />&nbsp; &nbsp;/usr/lib/userconf-pi/userconf &quot;$USER&quot; &quot;$PASS&quot;<br />else<br />&nbsp; &nbsp;echo &quot;$FIRSTUSER:$PASS&quot; | chpasswd -e<br />&nbsp; &nbsp;if &#91; &quot;$FIRSTUSER&quot; != &quot;$USER&quot; &#93;; then<br />&nbsp;&nbsp; &nbsp; &nbsp;usermod -l &quot;$USER&quot; &quot;$FIRSTUSER&quot;<br />&nbsp;&nbsp; &nbsp; &nbsp;usermod -m -d &quot;/home/$USER&quot; &quot;$USER&quot;<br />&nbsp;&nbsp; &nbsp; &nbsp;groupmod -n &quot;$USER&quot; &quot;$FIRSTUSER&quot;<br />&nbsp;&nbsp; &nbsp; &nbsp;if grep -q &quot;^autologin-user=&quot; /etc/lightdm/lightdm.conf ; then<br />&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;sed /etc/lightdm/lightdm.conf -i -e &quot;s/^autologin-user=.*/autologin-user=$USER/&quot;<br />&nbsp;&nbsp; &nbsp; &nbsp;fi<br />&nbsp;&nbsp; &nbsp; &nbsp;if &#91; -f /etc/systemd/system/getty@tty1.service.d/autologin.conf &#93;; then<br />&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;sed /etc/systemd/system/getty@tty1.service.d/autologin.conf -i -e &quot;s/$FIRSTUSER/$USER/&quot;<br />&nbsp;&nbsp; &nbsp; &nbsp;fi<br />&nbsp;&nbsp; &nbsp; &nbsp;if &#91; -f /etc/sudoers.d/010_pi-nopasswd &#93;; then<br />&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;sed -i &quot;s/^$FIRSTUSER /$USER /&quot; /etc/sudoers.d/010_pi-nopasswd<br />&nbsp;&nbsp; &nbsp; &nbsp;fi<br />&nbsp; &nbsp;fi<br />fi<br />systemctl enable ssh<br />cat &gt;/etc/wpa_supplicant/wpa_supplicant.conf &lt;&lt;WPAEOF<br />country=JP<br />ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev<br />ap_scan=1<br /><br />update_config=1<br />network={<br />&nbsp; &nbsp;ssid=&quot;$WIFISSID&quot;<br />&nbsp; &nbsp;psk=$WIFIPASS<br />}<br /><br />WPAEOF<br />chmod 600 /etc/wpa_supplicant/wpa_supplicant.conf<br />rfkill unblock wifi<br />for filename in /var/lib/systemd/rfkill/*:wlan ; do<br />&nbsp; echo 0 &gt; $filename<br />done<br />rm -f /etc/localtime<br />echo &quot;Asia/Tokyo&quot; &gt;/etc/timezone<br />dpkg-reconfigure -f noninteractive tzdata<br />cat &gt;/etc/default/keyboard &lt;&lt;&apos;KBEOF&apos;<br />XKBMODEL=&quot;pc105&quot;<br />XKBLAYOUT=&quot;jp&quot;<br />XKBVARIANT=&quot;&quot;<br />XKBOPTIONS=&quot;&quot;<br /><br />KBEOF<br />dpkg-reconfigure -f noninteractive keyboard-configuration<br />rm -f /boot/firstrun.sh<br />sed -i &apos;s| systemd.run.*||g&apos; /boot/cmdline.txt<br />exit 0<br />----------<br /><br />こんな感じでしょうか　設定すべき項目を最初の方に集めてありそこを書き換えればいいようにしてみました<br />その中で注意すべき点と云いますか…パスワードですね<br />USER=&apos;<span class="decorationC" style="color:red;">UserName</span>&apos;<br />PASS=&apos;<span class="decorationC" style="color:red;">$5$Salt$xxxxxxxxxx..</span>&apos;<br /><br />ログインするユーザのパスワードは暗号化されたものを指定する必要があるようです　これは <span class="decorationC" style="color:green;">openssl passwd</span> コマンドで生成できます<br /><br />$ <span class="decorationC" style="color:green;">openssl passwd -5 -salt=Salt password</span><br /><span class="decorationC" style="color:green;">-5</span> オプションは SHA256 アルゴリズムでの暗号化を行います　この他にも SHA512 で暗号化する <span class="decorationC" style="color:green;">-6</span> オプションや MD5 で暗号化する <span class="decorationC" style="color:green;">-1</span> オプションとかがあるようです<br /><span class="decorationC" style="color:green;">-salt</span> を指定すると更に複雑な暗号化を行うことができるらしい？　本来なら <span class="decorationC" style="color:green;">-salt=$RANDOM</span> のようにランダムに生成した文字列を指定するのが推奨されているようだけどお好みの文字列でも暗号化できます　まぁなんか面倒くさそうだな…って感じなら <span class="decorationC" style="color:green;">-salt</span> オプションを省略しても問題はないんですが汗<br /><br />この /boot/firstrun.sh でユーザのパスワードを指定する際には必ず暗号化されたパスワードを使用する必要があり…平文のパスワードは使えません　どうしても平文のパスワードを使いたい場合は <span class="decorationC" style="color:red;">/boot/firstrun.sh</span> と <span class="decorationC" style="color:red;">/rootfs/usr/lib/userconf-pi/userconf</span> 内の「chpasswd <span class="decorationC" style="color:blue;">-e</span>」の「<span class="decorationC" style="color:blue;">-e</span>」を削除すればできなくもないけど… <span class="decorationC" style="color:red;">/rootfs/usr/lib/userconf-pi/userconf</span> は ext4 ファイルシステムなので OS によっては読み書きできないかもだしアクセス権が root なのでその辺もどうにかしないといけないので色々と面倒です<br /><br />そんな訳なんで…初ログイン後にすぐ別のパスワードに書き換えることを前提に仮的なパスワードを作っておきました<br />$ <span class="decorationC" style="color:green;">openssl passwd -5 -salt=pass pass</span> として作成した <span class="decorationC" style="color:red;">$5$pass$Rl0JZvvs0bt2Lu8dfAumW11vh2yrd.LfOysdTyQ7Yt5</span> って感じのセキュリティのかけらもない意識低すぎて気絶しそうなパスワードですが実際にこれを設定した後に「pass」なるパスワード文字列でログインできます<br /><br /><b class="decorationB">※ これでログインしたら直ちに <span class="decorationC" style="color:green;">passwd</span> コマンドなりで別のパスワードを再設定してください！</b><br /><br />ユーザ名の設定の他に Wi-Fi についての設定というかパスワードについても説明しておきます<br />WIFISSID=&apos;<span class="decorationC" style="color:red;">Wi-Fi_SSID</span>&apos;<br />WIFIPASS=&apos;<span class="decorationC" style="color:red;">0123456789abcdefxxxx..</span>&apos;<br /><br />ここでも暗号化されたパスワードを使用します　これは <span class="decorationC" style="color:green;">wpa_passphrase</span> コマンドで生成できます<br /><br />$ <span class="decorationC" style="color:green;">wpa_passphrase &quot;Wi-Fi_SSID&quot; &quot;password&quot;</span><br />network={<br />&nbsp; &nbsp;ssid=&quot;Wi-Fi_SSID&quot;<br />&nbsp; &nbsp;&#35;psk=<span class="decorationC" style="color:blue;">&quot;password&quot;</span><br />&nbsp; &nbsp;psk=<span class="decorationC" style="color:red;">bd3f1ad8bd45873a14351f4209ab719147a960587508a8c89ef776cd9b43cefb</span><br />}<br />こんな感じで 256bit PSK アルゴリズムを用いた暗号化パスワードが生成されます　このパスワードを WIFIPASS=&apos;<span class="decorationC" style="color:red;">0123456789abcdefxxxx..</span>&apos; の部分に貼り付けてやれば ok です<br />ちなみに &#35;psk=<span class="decorationC" style="color:blue;">&quot;password&quot;</span> って平文のパスワードがコメントして出てるっていうかパスワードをダブルクォート「&quot;&quot;」で囲んでやれば平文のパスワードを指定できるんで… WIFIPASS=&apos;<span class="decorationC" style="color:red;">&quot;password&quot;</span>&apos; って指定も ok です　ただしこの設定はシステムが可動した後も /etc/wpa_supplicant/wpa_supplicant.conf 内に残り続けることになるんでリスクがあります　平文のパスワードは危険を承知した上でご使用ください<br /><br />　　：<br /><br />まぁそんなこんなで上記の /boot/cmdline.txt と /boot/firstrun.sh を用意したらラズパイの電源を入れて起動します　数分ほど待った後に SSH でログインできます　ログインした後は概ね <span class="decorationM" style="background-color:lightcyan;"><a href="https://room.dengeki.jp/tegalog.cgi?postid=2" class="postidlink">完全モニタ無しで Raspberry Pi 4 を VNC 接続できるとこまでセットアップするメモ</a></span> の手順で VNC 接続できますが…その辺を切り取って手短に解説しておきます<br /><br />まずは SSH でログインして $ <span class="decorationC" style="color:green;">sudo raspi-config</span> 設定ツールを起動する　キーボードの矢印キーで移動してエンターキーで決定ってスタイルです　Tab キーを使う場面もあります　※ 画像は古いバージョンのものなので少々表示が異なる場合があります<br /><br /><img class="embeddedimage " width="736" height="479" src="https://room.dengeki.jp/images/202110151828034-admin.png" alt="202110151828034-admin.png"> <br /><span class="decorationC" style="color:red;">3 Interface Options</span> を選ぶ<br /><br /><img class="embeddedimage " width="736" height="479" src="https://room.dengeki.jp/images/202110151828035-admin.png" alt="202110151828035-admin.png"> <br /><span class="decorationC" style="color:red;">I3 VNC</span> を選ぶ<br /><br /><img class="embeddedimage " width="736" height="479" src="https://room.dengeki.jp/images/202110151828036-admin.png" alt="202110151828036-admin.png"> <br />VNC サーバを有効にするけどいいの？と聞かれるんで <span class="decorationC" style="color:red;">&lt;Yes&gt;</span> を選ぶ<br /><br /><img class="embeddedimage " width="736" height="479" src="https://room.dengeki.jp/images/202110151828037-admin.png" alt="202110151828037-admin.png"> <br />設定完了<br /><br />お次は vncserver-x11 ファイルを編集する<br />$ <span class="decorationC" style="color:green;">sudo nano /root/.vnc/config.d/vncserver-x11</span><br />末尾に以下の 3 行を追加します<br /><img class="embeddedimage " width="736" height="479" src="https://room.dengeki.jp/images/2021101518280310-admin.png" alt="2021101518280310-admin.png"> <br /><span class="decorationC" style="color:red;">Authentication=VncAuth<br />Encryption=AlwaysOff<br />Password=</span><br /><br />VNC サーバを再起動する<br />$ <span class="decorationC" style="color:green;">sudo systemctl restart vncserver-x11-serviced</span><br /><br />VNC のパスワードを設定する<br />$ <span class="decorationC" style="color:green;">sudo vncpasswd -service</span><br /><br />VNC サーバを再起動する<br />$ <span class="decorationC" style="color:green;">sudo systemctl restart vncserver-x11-serviced</span><br /><br /><img class="embeddedimage " width="1069" height="837" src="https://room.dengeki.jp/images/202204291851313-admin.png" alt="202204291851313-admin.png"><br />以前はこの後に /boot/config.txt を編集する必要があったけど…今回はこの作業をする事なく VNC 接続できました<br /><br /><img class="embeddedimage " width="1069" height="837" src="https://room.dengeki.jp/images/202204291851312-admin.png" alt="202204291851312-admin.png"><br />せっかくなんで日本語化の設定も行っておきましょう<br /><br /><img class="embeddedimage " width="532" height="413" src="https://room.dengeki.jp/images/202204291851311-admin.png" alt="202204291851311-admin.png"><br />Raspberry Pi Configuration の Location タブの Set Locate ボタンを押して Language と Character Set を設定して OK ボタンを押下する<br />その後に再起動することにより設定が反映され表示が日本語になります<br /><br />あーあとお好みにより $ <span class="decorationC" style="color:green;">sudo apt install ibus-mozc</span> でローマ字かな漢字変換っていうかインプット・メソッドをインストールしておくのもいいかも知れません　これも再起動後に有効になります<br /><br /><img class="embeddedimage " width="320" height="240" src="https://room.dengeki.jp/images/20220429185131-admin.png" alt="20220429185131-admin.png"><br />既に設定した後なんで心もち表示が違うかもだけど…右上のインジケータにあるキーボードマークをクリックして Mozc を選べば ok です<br /><br />　　：<br /><br />まぁだいたいこんな感じですかね　今後のバージョンアップなりで使えなくなるかもな資料ですが…とりあえず /boot/firstrun.sh が何をしていたのかをざっくり知ることができてよかったです<br />つーか世間的に <a class="url labeledlink" href="https://ubuntu.com/download/raspberry-pi" rel="noopener noreferrer" target="_blank">Ubuntu Desktop 22.04 LTS on a Raspberry Pi</a> が話題のようですね…これはいっぺん試してみなきゃ！(&gt;_&lt;)ｗって感じで今回はこの辺で <a href="https://room.dengeki.jp/tegalog.cgi?tag=%52%61%73%70%62%65%72%72%79%20%50%69" class="taglink" title="Raspberry Pi">#&#91;Raspberry Pi&#93;</a><br /><br />※ 追記 ※<br />上記の話とは概ね関係ないんだけど…ラズパイの Bootloader イメージを <a class="url labeledlink" href="https://www.raspberrypi.com/software/" rel="noopener noreferrer" target="_blank">Raspberry Pi Imager</a> を使わずにダウンロードしたい場合は <a class="url" href="https://downloads.raspberrypi.org/eeprom_recovery.json" rel="noopener noreferrer" target="_blank" title="https://downloads.raspberrypi.org/eeprom_recovery.json">https://downloads.raspberrypi.org/eeprom...</a> に記された &quot;SD Card Boot&quot;, &quot;USB Boot&quot;, &quot;Network Boot&quot; のそれぞれの url を参照するといいらしい？（無保証　ちょっと調べてみたら判明した気がしたんで今後のもしものために記載しておくメモ -- Posted by 猫山ぽるか 〔9939文字〕 No.26 ]]></description>
	<link>https://room.dengeki.jp/tegalog.cgi?postid=26</link>
	<guid>https://room.dengeki.jp/tegalog.cgi?postid=26</guid>
	<category>info</category>
	<pubDate>Fri, 29 Apr 2022 11:48:20 +0900</pubDate>
</item>
<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ スケジュール実行 cron は 13 日の金曜日の夢を見るか… ]]></title>
	<description><![CDATA[ スケジュール実行 cron は 13 日の金曜日の夢を見るか？<br /><img class="embeddedimage " width="240" height="240" src="https://room.dengeki.jp/images/20211211080738-admin.png" alt="20211211080738-admin.png"><br />　<br />「〇〇〇〇は△△△△の夢を見るか？」ってフレーズを見かけるとなんかえっちな気分になっちゃう！って光栄マイコンシステムのストロベリーなんとか世代のひいおじいちゃんが云ってたけど…自称：ゆとりのない平成のゆとり的なオレ様的にはしょーみなンてるんか全く意味わかんないですｗ　まじまじｗｗｗ<br />まぁそんな茶番はおいといて…諸々の bot 大好きな人々に愛されるスケジュール実行の cron についての諸々です<br /><br />cron - daemon to execute scheduled commands (Vixie Cron)<br />スケジュールされたコマンドを実行するデーモンって事らしいですね（機械翻訳<br /><br />このスケジュールの確認・設定をするには crontab なるコマンドを使います<br />スケジュールの確認 <span class="decorationC" style="color:green;">crontab -l</span><br />スケジュールの設定 <span class="decorationC" style="color:green;">crontab -e</span><br /><br />設定の初回起動時のみ使用するエディタを聞かれるらしい？　なおこの使用するエディタは以下のコマンドで再設定できるようです<br /><span class="decorationC" style="color:green;">select-editor</span><br /><br />Select an editor. &nbsp;To change later, run &apos;select-editor&apos;.<br />&nbsp; 1. /bin/ed<br />&nbsp; 2. /bin/nano&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;<span class="decorationC" style="color:red;">&lt;---- easiest</span><br />&nbsp; 3. /usr/bin/vim.tiny<br /><br />Choose 1-3 <span class="decorationC" style="color:red;">&#91;2&#93;</span>: <br /><br />なんか「<span class="decorationC" style="color:red;">&lt;---- easiest</span>」と「<span class="decorationC" style="color:red;">&#91;2&#93;</span>」ってのが現在設定されているエディタっぽく見えるけどそうじゃなくて…何も入力せずに Enter した時に選択されるデフォルト値を表示しているようです　紛らわしいですね(-_-；)<br /><br />　　：<br /><br />では実際に <span class="decorationC" style="color:green;">crontab -e</span> して設定してみましょう<br />新たなスケジュールを設定する場合は…新しい行として以下の書式を追加します<br /><br /><span class="decorationC" style="color:green;">* * * * * コマンド</span><br /><br />5 個並んだ「*」は順番に… 分 時 日 月 曜日 を指しています<br />「*」は設定可能な全ての値になってるんで…上記の「* * * * * コマンド」は <b class="decorationB">全ての分</b> の <b class="decorationB">全ての時</b> の <b class="decorationB">全ての日</b> の <b class="decorationB">全ての月</b> の <b class="decorationB">全ての曜日</b> って意味となり「毎分(だいたい 0 秒くらい)にコマンドを実行」となります<br />もうちょっと細かく設定した例っていうか…<br /><br /><span class="decorationC" style="color:green;">1 * * * * コマンド</span><br />毎月の毎日の毎時の 1 分にコマンドを実行<br /><br /><span class="decorationC" style="color:green;">1 2 * * * コマンド</span><br />毎月の毎日の 2 時 1 分にコマンドを実行<br /><br /><span class="decorationC" style="color:green;">1 2 3 * * コマンド</span><br />毎月の 3 日の 2 時 1 分にコマンドを実行<br /><br /><span class="decorationC" style="color:green;">1 2 3 4 * コマンド</span><br />4 月 3 日の 2 時 1 分にコマンドを実行<br /><br />曜日は少々特殊な扱いになってるってるんでアレだけど…例えば<br /><span class="decorationC" style="color:green;">* * * * 6 コマンド</span> もしくは<br /><span class="decorationC" style="color:green;">* * * * sat コマンド</span> で毎月の<b class="decorationB">毎土曜日</b>の毎時の毎分にコマンドを実行します<br />数字と曜日は 0=sun, 1=mon, 2=tue, 3=wed, 4=thu, 5=fri, 6=sat, 7=sun に対応しています　大文字小文字は関係ないようです<br /><br />　　：<br /><br />もっと細やかな設定をしてみましょう　例えば勤務時間内にありがちな設定っていうか 8 時から 17 時までの毎時 0 分にコマンドを実行するって例だと…<br /><span class="decorationC" style="color:green;">0 8,9,10,11,12,13,14,15,16,17 * * * コマンド</span><br /><span class="decorationC" style="color:green;">0 8-17 * * * コマンド</span><br />設定したい内容を「,(カンマ)」で区切って列挙するとか「-(ハイフン)」で 8 から 17 までって感じで指定します<br /><span class="decorationC" style="color:green;">0 8-12,13-17 * * * コマンド</span><br />こんな感じで範囲指定を列挙することもできるようです<br /><br />ただし分なり時なりの境い目をまたいで設定する場合には注意が必要です　例えば毎時の 50 分から次の 10 分までって場合だと…<br /><span class="decorationC" style="color:green;">50-10 * * * * コマンド</span><br />この指定では動きません　この場合だと…<br /><span class="decorationC" style="color:green;">50-59,0-10 * * * * コマンド</span><br />こんな感じで途中に「,(カンマ)」を入れて区切ってやらないとダメなようです　ちなみに「,(カンマ)」で列挙する場合には数の大小の順番は関係ないらしいです<br /><br />　　：<br /><br />さらに細やかな設定をしてみましょう　例えば（どのような状況でそのような必要があるのかイマイチ思い浮かばないけど）偶数日（2 で割り切れる日）の 10 時 20 分のみコマンドを実行するって例だと…<br /><span class="decorationC" style="color:green;">20 10 2,4,6,8,10,12,14,16,18,20,22,24,26,28,30 * * コマンド</span><br /><span class="decorationC" style="color:green;">20 10 2-30/2 * * コマンド</span><br />こんな感じで指定できます　まぁ「全ての偶数日」って事なんで「2-30/2」なんて指定じゃなく「*/2」でもイケるようです<br />ちなみに「全ての奇数日」ってしたいのあれば「1-31/2」って感じになるみたいです<br />　　：<br /><br />月初にコマンドを実行したい時っていうか月初は 1 日に決まってるんでその辺は簡単だってことで…じゃぁ月末にコマンドを実行したい時はどうしたらいいんでしょうか<br />カレンダーをざっと眺めて 12 ヶ月分の設定を用意しとけば…って「あーでも 2 月の月末は 28 日だけじゃなくてうるう年とかどうしよう！！」ってなるんでもうちょっと手の込んだ設定でどうにかしてみましょう<br />この場合っていうか cron の設定だけでは毎月の月末を判定することはできません　なので<b class="decorationB">コマンド側</b>でその辺をどうにか対処してみます<br /><br /><span class="decorationC" style="color:green;">* * 28-31 * * /usr/bin/test $(/bin/date -d &apos;+1 day&apos; +%d) -eq 1 && コマンド</span><br />いきなりややこしい感じになって申し訳ないかんじで（汗<br />これは月末としてなり得る 28 日 から 31 日にかけて <span class="decorationC" style="color:green;">/bin/date</span> に「翌日」を出力させた後に <span class="decorationC" style="color:green;">/usr/bin/test</span> でそれが「月初」を意味する「1」であるかを判定して「1」であれば <span class="decorationC" style="color:green;">&&</span> でくっつけたコマンドを実行するって意味になります<br /><br />cron 内での使用に限った話じゃないけど…この <span class="decorationC" style="color:green;">&&</span> でコマンドを並べると「直前のコマンドが正常終了した場合に次のコマンドを実行」って動作をします　例えば Web サイトの証明書の更新コマンドを実行して…それが成功して更新コマンドが正常終了した時のみ Web サーバを再起動するなんて処理を 1 行にまとめて書けるんで便利だと思います<br /><br />　　：<br /><br />そんな感じの複雑な判定を求められるスケジュール設定っていうか…少し特別動作をする「曜日」の設定についての注意事項を少々<br />例えば「13 日の金曜日の 0 時 0 分にコマンドを実行」なんてありがちなスケジュール設定をしたいと思いました<br /><span class="decorationC" style="color:green;">0 0 13 * fri コマンド</span><br />これでバッチリだぜ！！(&gt;_&lt;)ｗって思いたい所ですが…これでは思った動作をしません<br />これだと「毎月の 13 日」と「毎月の金曜日」の両方でコマンドが実行されてしまします<br /><br />何となくこれまで見てきた cron の動作的に「設定した項目の全てに合致した AND 的な動作」を期待しがちなんだけど…「日の設定」と「曜日の設定」に関しては「どちらか一方でも合致したら動く OR 的な動作」になってしまうようです　※ただし「*」での設定は除く<br /><br /><span class="decorationC" style="color:green;">0 0 13 * * /usr/bin/test $(/bin/date +\%w) -eq 5 && コマンド</span><br /><span class="decorationC" style="color:green;">0 0 * * fri /usr/bin/test $(/bin/date +\%d) -eq 13 && コマンド</span><br />そんな 13 日の金曜日を判定するには上記のように設定します<br />※ 0=sun, 1=mon, 2=tue, 3=wed, 4=thu, 5=fri, 6=sat, 7=sun<br /><br />前者は<b class="decorationB">毎月の 13 日</b>に <span class="decorationC" style="color:green;">/bin/date</span> を使って曜日を出力させてそれが<b class="decorationB">金曜日かどうか</b>を判定する手法<br />後者は<b class="decorationB">毎月の金曜日</b>に <span class="decorationC" style="color:green;">/bin/date</span> を使って日付を出力させてそれが<b class="decorationB"> 13 日かどうか</b>を判定する手法です<br />後者の手法は「毎月の金曜日」って感じで月に 4〜5 回ほど動作することになって無駄が多いんで…この場合は前者の「毎月の 13 日」って設定の方が好ましいと思います<br /><br />　　：<br /><br />あと cron の設定でミスりやすい点と云うかコマンドや入出力に使用するファイルへのパスですかね<br />コマンドというかスクリプトを作ってる時にありがちなんだけど…どこかのフォルダをカレントディレクトリに設定してスクリプトをテストしていて「できた！さぁ cron に設定しよう！」ってしたら思った動作をしない時があるんですよね<br />これは cron が実行するカレントディレクトリが往々にしてテストしていたフォルダと違う事により指定したファイルを読めない・書けないって事が原因にあるようです<br />なので cron で実行されるコマンド（スクリプト）はフルパスで指定して…かつ読み書きするファイルなどもフルパスで設定する必要があります　うっかりしてるとやらかしがちなミスなんで注意していきタイネ！<br /><br />※なお今回紹介した <span class="decorationC" style="color:green;">/usr/bin/test</span> と <span class="decorationC" style="color:green;">/bin/date</span> のパスは我が家でのもので…環境によって違う場合があるので事前に which コマンド等で調べてから使用してください <a href="https://room.dengeki.jp/tegalog.cgi?tag=%52%61%73%70%62%65%72%72%79%20%50%69" class="taglink" title="Raspberry Pi">#&#91;Raspberry Pi&#93;</a> <a href="https://room.dengeki.jp/tegalog.cgi?tag=%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89%e3%83%98%e3%83%ab%e3%83%97" class="taglink" title="コマンドヘルプ">#コマンドヘルプ</a> <a href="https://room.dengeki.jp/tegalog.cgi?tag=%63%72%6f%6e" class="taglink" title="cron">#cron</a> -- Posted by 猫山ぽるか 〔3967文字〕 No.12 ]]></description>
	<link>https://room.dengeki.jp/tegalog.cgi?postid=12</link>
	<guid>https://room.dengeki.jp/tegalog.cgi?postid=12</guid>
	<category>info</category>
	<pubDate>Sat, 11 Dec 2021 08:07:38 +0900</pubDate>
</item>
<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ ラズパイの Apache で CPU 情報を取得する vcg… ]]></title>
	<description><![CDATA[ ラズパイの Apache で CPU 情報を取得する vcgencmd が CGI で動かない問題を解決する<br /><img class="embeddedimage " width="240" height="240" src="https://room.dengeki.jp/images/20211205061157-admin.png" alt="20211205061157-admin.png"><br />　<br />Raspberry Pi 4 (ラズパイ) に CPU のクロック周波数や温度やらを取得する vcgencmd なるコマンドが用意されています<br />CPU などなどのクロック周波数を表示<br /><span class="decorationC" style="color:green;">for src in arm core h264 isp v3d uart pwm emmc pixel vec hdmi dpi ; do echo -e &quot;$src:\t$(vcgencmd measure_clock $src)&quot; ; done</span><br />CPU の温度を表示<br /><span class="decorationC" style="color:green;">vcgencmd measure_temp</span><br />利用可能・不可能なコーデックの表示<br /><span class="decorationC" style="color:green;">for codec in H264 MPG2 WVC1 MPG4 MJPG WMV9 ; do &nbsp;echo -e &quot;$codec:\t$(vcgencmd codec_enabled $codec)&quot; ; done</span><br /><br /><img class="embeddedimage " width="736" height="479" src="https://room.dengeki.jp/images/20211205053433-admin.png" alt="20211205053433-admin.png"><br />実行例<br /><br />その他にもいろいろあるんで…詳しくは <a class="url labeledlink" href="https://elinux.org/RPI_vcgencmd_usage" rel="noopener noreferrer" target="_blank">解説ページをご覧ください</a> って感じの vcgencmd コマンドなんですが Apache 上の CGI として実行させようとすると失敗するんでその辺をどうにかしてみます<br /><br />まぁ結論から云ってしまうと…グループ video に Apache が実行するユーザである www-data が入っていないから動かないって事らしいです<br /><span class="decorationC" style="color:green;">cat /etc/group | grep video</span><br /><b class="decorationB"><span class="decorationC" style="color:red;">video</span>:x:44:pi</b><br /><br />ちなみに Apache が実行するユーザは /etc/apache2/envvars で指定しているようです<br />export APACHE_RUN_USER=www-data<br />export APACHE_RUN_GROUP=www-data<br /><br />試しにコマンドラインでユーザを www-data に切り替えて確認してみましょう<br /><span class="decorationC" style="color:green;">sudo su -s /bin/bash www-data</span><br /><span class="decorationC" style="color:green;">vcgencmd measure_temp</span><br /><b class="decorationB">VCHI initialization failed</b><br />やはり使えないみたいですね…<br /><br />それじゃグループ video にユーザ www-data を追加していきましょう　まぁコマンド一発なんですが<br /><span class="decorationC" style="color:green;">sudo usermod -aG video www-data</span><br />これで追加できます　確認すると…<br /><span class="decorationC" style="color:green;">cat /etc/group | grep video</span><br /><b class="decorationB"><span class="decorationC" style="color:red;">video</span>:x:44:pi,www-data</b><br />グループ video にユーザ www-data が追加されました<br /><br />それでは再びユーザを www-data に切り替えて確認してみましょう<br /><span class="decorationC" style="color:green;">sudo su -s /bin/bash www-data</span><br /><span class="decorationC" style="color:green;">vcgencmd measure_temp</span><br /><b class="decorationB">temp=28.2&apos;C</b><br />ちゃんと使えるようになりました<br /><br />　　：<br /><br />しかし Apache 上の CGI として vcgencmd コマンドを実行しても「VCHI initialization failed」のエラーが出続けます　なんで？？<br />いろいろと試していて…まぁはっきりとした理由は不明なんですが Apache を再起動させたらこの問題が解決しました<br /><span class="decorationC" style="color:green;">sudo systemctl restart apache2</span><br />これで Apache 上の CGI として vcgencmd コマンドが使えるようになりました　何か別の所に問題があるかもだけど…我が家の環境ではこの手法で解決できました<br /><br /><img class="embeddedimage " width="736" height="479" src="https://room.dengeki.jp/images/202112050534331-admin.png" alt="202112050534331-admin.png"><br />そんな操作の過程のスクリーンショットをぺたり　<del class="decorationD"><small class="decorationT">改竄の余地のないよう作業の過程を全て収録してあります</small></del><br /><br />※参考資料　グループからユーザを削除するには…<br />トラブルの解決中っていうか…いろいろやってて勢い余って必要のないユーザをグループに追加しちゃった！(&gt;_&lt;)ｑって時なんかにグループからユーザを削除する場合には以下のようにします<br />例えばグループ <span class="decorationC" style="color:red;">video</span> に追加されたユーザ <span class="decorationC" style="color:blue;">www-data</span> を削除する場合は<br /><span class="decorationC" style="color:green;">sudo gpasswd -d <span class="decorationC" style="color:blue;">www-data</span> <span class="decorationC" style="color:red;">video</span></span><br />こんな感じに操作します　先ほどの <span class="decorationC" style="color:green;">usermod</span> の場合とユーザ名とグループ名の指定が逆になってるので注意が必要です　なんなら <span class="decorationC" style="color:green;">gpasswd -a</span> でグループにユーザを追加することができるらしいんですが…どっちを使うといいんだろうね<br /><br />　　：<br /><br />さてさてそんな vcgencmd を使ってこんな感じで動かしています<br />&nbsp;<img class="embeddedimage" src="https://yqn.f5.si/pic/pi4.png" alt="(キャプション自動取得対象外)">　その都度都度で PNG 画像を生成しています<br />Web サーバの処理やら画像の生成などで一時的にクロック高めな感じですがアイドル時は 600MHz くらいになってるようです<br />そんなこんなで何かの都合でラズパイを再セットアップした際に悩まないようなメモでした <a href="https://room.dengeki.jp/tegalog.cgi?tag=%52%61%73%70%62%65%72%72%79%20%50%69" class="taglink" title="Raspberry Pi">#&#91;Raspberry Pi&#93;</a> <a href="https://room.dengeki.jp/tegalog.cgi?tag=%41%70%61%63%68%65" class="taglink" title="Apache">#Apache</a> <a href="https://room.dengeki.jp/tegalog.cgi?tag=%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89%e3%83%98%e3%83%ab%e3%83%97" class="taglink" title="コマンドヘルプ">#コマンドヘルプ</a> <a href="https://room.dengeki.jp/tegalog.cgi?tag=%43%47%49" class="taglink" title="CGI">#CGI</a> -- Posted by 猫山ぽるか 〔2063文字〕 No.11 ]]></description>
	<link>https://room.dengeki.jp/tegalog.cgi?postid=11</link>
	<guid>https://room.dengeki.jp/tegalog.cgi?postid=11</guid>
	<category>info</category>
	<pubDate>Sun, 05 Dec 2021 05:34:33 +0900</pubDate>
</item>
<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ Perl の GD::Simple モジュールでフォントを指… ]]></title>
	<description><![CDATA[ Perl の GD::Simple モジュールでフォントを指定したりしてみるメモ<br /><img class="embeddedimage " width="200" height="200" src="https://room.dengeki.jp/images/20211203182031-admin.png" alt="20211203182031-admin.png"><br />　<br />初期のインターネットっていうか Web サイト黎明期の CGI と云えば Perl でキマリ！！って時代もありましたよね…って感じすらすっかり忘れ去られたかのように近年では全く話題にもならない Perl ですが「三つ子の魂百まで」なのか何なのかあまりにも手に馴染みすぎてついつい使っちゃうって事はありませんか？　私はあります　いやむしろ未だに他の言語が使えず Perl にどっぷりなんです悪いか！！(-_-#)って事なのか何なのかそんな忘れ去られつつある言語である Perl と…その Perl で画像を扱う GD ライブラリの（主に文字フォント系の）使い方を少しばかり探求してみたかなりニッチな需要的な忘れ物防止メモです<br /><br />そんな Perl の GD ライブラリですが…以下のようにコマンド一発で簡単にインストールできます<br /><span class="decorationC" style="color:green;">sudo apt install libgd-perl</span><br />依存関係とか詳しく調べてないんでアレだけど…ちょっと見た感じでは我が家の環境にいつの間にか libgd-text-perl なんてのも入っていたんで文字フォントの扱いに不具合が発生した時には <span class="decorationC" style="color:green;">sudo apt install libgd-text-perl</span> してみるのもいいかもです（汗<br /><br />あーあと標準的な Raspberry Pi OS のセットアップではゴシック書体の日本語フォントしか入ってないっぽい？　後に説明するけど…フォント名に Sans とだけ付いてるフォントは概ねゴシック書体です　明朝書体には Serif と付くらしいんだけどラズパイにはそれが入ってないみたい？なんで…後の動作確認しやすいように明朝書体が含まれる程よいフォントを追加でインストールしておきます<br /><span class="decorationC" style="color:green;">sudo apt install fonts-ipaexfont</span><br />日本語フォントファイルってのはそれなりに容量が大きいんで…少容量 microSD とかで運用してる方などには要注意かもですがまぁその辺はうまいことどうにかしてやってください（瀧汗<br /><br />※ 追記 ※<br />Google の「No more 豆腐」と呼ばれるフォントのインストール方法<br /><span class="decorationC" style="color:green;">sudo apt install fonts-noto-cjk</span><br />中国語(C)と日本語(J)と韓国語(K)が一緒くたに入っちゃう感じっぽいです<br /><br />そんな下準備が済んだトコロで…現在システムに入ってるフォントの一覧を取得する方法です　それには <span class="decorationC" style="color:green;">fc-list</span> ってコマンドを使うんだけど…日本語に非対応なフォントとかも羅列されて心もち見づらいんでその辺を絞り込んで表示させてみましょう<br /><span class="decorationC" style="color:green;">fc-list :lang=ja | sort | uniq</span><br />sort と uniq は並べ替えてダブり行を除去してくれるんで見やすくなると思います<br />ここで表示される内容は…フォントのパス付きファイル名とフォントファミリー名とスタイルです　後に説明する GD のフォント指定で…何となくフォントのパス付きファイル名で指定してたんだけどそれではダメでデフォルトのフォントが使用され続けてて悩んでたんだけどどうやら「フォントファミリー名：スタイル」で指定するといいって事を突き止めたんで<br /><span class="decorationC" style="color:green;">fc-list -f &apos;%{family}:%{style}\n&apos; :lang=ja | sort | uniq</span><br />このようなオプション指定で実行するといいと思います<br /><br />実行すると（環境によって違うと思うけど）こんな感じの一覧が出ます<br />Droid Sans Fallback:Regular<br />IPAexゴシック,IPAexGothic:Regular<br /><span class="decorationC" style="color:red;">IPAex明朝,IPAexMincho:Regular</span><br />Noto Sans CJK JP,Noto Sans CJK JP Black:Black,Regular<br />Noto Sans CJK JP,Noto Sans CJK JP Bold:Bold,Regular<br />Noto Sans CJK JP,Noto Sans CJK JP DemiLight:DemiLight,Regular<br />Noto Sans CJK JP,Noto Sans CJK JP Light:Light,Regular<br />Noto Sans CJK JP,Noto Sans CJK JP Medium:Medium,Regular<br />Noto Sans CJK JP,Noto Sans CJK JP Regular:Regular<br />Noto Sans CJK JP,Noto Sans CJK JP Thin:Thin,Regular<br />Noto Sans CJK KR,Noto Sans CJK KR Black:Black,Regular<br />---- 中略 ----<br />この中から使いたいフォントの行をコピーして後の GD のフォント指定に使用するといい感じに使えるようです　そして今後は「<span class="decorationC" style="color:red;">IPAex明朝,IPAexMincho:Regular</span>」を使って話を進めていきます<br /><br />それでは早速その辺を使ったサンプルを作ってみますかね<br /><br />----------<br /><br /><span class="decorationC" style="color:darkgray;">&#35;!/usr/bin/perl</span><br /><span class="decorationC" style="color:cornflowerblue;">use</span> GD<span class="decorationC" style="color:firebrick;">::</span>Simple;<br /><br /><span class="decorationC" style="color:orange;">$img_obj</span> <span class="decorationC" style="color:firebrick;">=</span> GD<span class="decorationC" style="color:firebrick;">::</span>Simple<span class="decorationC" style="color:firebrick;">-&gt;</span><span class="decorationC" style="color:mediumblue;">new</span>(500, 500);<br /><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>font(<span class="decorationC" style="color:deepskyblue;">&apos;IPAex明朝,IPAexMincho:Regular&apos;</span>); <span class="decorationC" style="color:darkgray;">&#35; フォント</span><br /><span class="decorationC" style="color:darkgray;">&#35;$img_obj-&gt;font(&apos;/usr/share/fonts/opentype/ipaexfont-mincho/ipaexm.ttf&apos;); &#35; このフォント指定じゃダメみたい</span><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>fgcolor(<span class="decorationC" style="color:deepskyblue;">&apos;red&apos;</span>); <span class="decorationC" style="color:darkgray;">&#35; 文字色</span><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>fontsize(30); <span class="decorationC" style="color:darkgray;">&#35; フォントサイズ</span><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>moveTo(20, 100); <span class="decorationC" style="color:darkgray;">&#35; 始点 x, y</span><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>string(&quot;<span class="decorationC" style="color:deepskyblue;">日本語フォント表示</span><span class="decorationC" style="color:olivedrab;">\n</span><span class="decorationC" style="color:deepskyblue;">Raspberry Pi</span><span class="decorationC" style="color:olivedrab;">\n</span><span class="decorationC" style="color:deepskyblue;">1234567890</span>&quot;); <span class="decorationC" style="color:darkgray;">&#35; 文字列（最後に記述）</span><br /><br /><span class="decorationC" style="color:darkgray;">&#35; ファイルへ出力</span><br /><span class="decorationC" style="color:darkgray;">&#35;open(IMG, &quot;&gt; gd_out1.gif&quot;); &#35; GIF で出力</span><br /><span class="decorationC" style="color:darkgray;">&#35;open(IMG, &quot;&gt; gd_out1.jpg&quot;); &#35; JPEG で出力</span><br /><span class="decorationC" style="color:mediumblue;">open</span>(IMG, <span class="decorationC" style="color:deepskyblue;">&quot;&gt; gd_out1.png&quot;</span>); <span class="decorationC" style="color:darkgray;">&#35; PNG で出力</span><br /><span class="decorationC" style="color:mediumblue;">binmode</span> IMG; <span class="decorationC" style="color:darkgray;">&#35; バイナリ・ストリームへ書き込む</span><br /><span class="decorationC" style="color:darkgray;">&#35;print IMG $img_obj-&gt;gif(); &#35; GIF で出力</span><br /><span class="decorationC" style="color:darkgray;">&#35;print IMG $img_obj-&gt;jpeg(100); &#35; JPEG (品質：0〜100) で出力</span><br /><span class="decorationC" style="color:mediumblue;">print</span> IMG <span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>png(); <span class="decorationC" style="color:darkgray;">&#35; PNG で出力</span><br /><span class="decorationC" style="color:mediumblue;">close</span>(IMG);<br /><br />----------<br /><br />実行すると以下のような感じの画像が生成されると思います<br /><img class="embeddedimage " width="500" height="500" src="https://room.dengeki.jp/images/20211120103516-admin.png" alt="20211120103516-admin.png"><br />今回は PNG で保存してみましたが GIF や JPEG でも保存できます　「ファイルへ出力」の辺りのコメントアウトしてある部分で切り替えられるんで試してみてください<br /><br />　　：<br /><br />そんな Perl で画像を生成するって話だと…既存の画像を読み込んで文字とかを描き込んで使いたい場合があると思います　そんな時には以下のように指定します<br /><a class="url urlimage selflink" href="https://yqn.f5.si/pic/gd_test2.gif"><img src="https://yqn.f5.si/pic/gd_test2.gif" class="embeddedimage" alt="gd_test2.gif"></a> <a class="url urlimage selflink" href="https://yqn.f5.si/pic/gd_test2.jpg"><img src="https://yqn.f5.si/pic/gd_test2.jpg" class="embeddedimage" alt="gd_test2.jpg"></a> <a class="url urlimage selflink" href="https://yqn.f5.si/pic/gd_test2.png"><img src="https://yqn.f5.si/pic/gd_test2.png" class="embeddedimage" alt="gd_test2.png"></a><br />&#91;サンプル画像&#93;<br /><br />----------<br /><br /><span class="decorationC" style="color:darkgray;">&#35;!/usr/bin/perl</span><br /><span class="decorationC" style="color:cornflowerblue;">use</span> GD<span class="decorationC" style="color:firebrick;">::</span>Simple;<br /><br /><span class="decorationC" style="color:darkgray;">&#35;$img_obj = GD::Simple-&gt;newFromGif(&quot;./gd_test2.gif&quot;); # GIF 画像の時</span><br /><span class="decorationC" style="color:darkgray;">&#35;$img_obj = GD::Simple-&gt;newFromJpeg(&quot;./gd_test2.jpg&quot;, 1); # JPEG 画像の時　最後の「1」は True Color のフラグ？（未解明）</span><br /><span class="decorationC" style="color:orange;">$img_obj</span> <span class="decorationC" style="color:firebrick;">=</span> GD<span class="decorationC" style="color:firebrick;">::</span>Simple<span class="decorationC" style="color:firebrick;">-&gt;</span>newFromPng(<span class="decorationC" style="color:deepskyblue;">&quot;./gd_test2.png&quot;</span>, 1); <span class="decorationC" style="color:darkgray;">&#35; PNG 画像の時　最後の「1」は True Color のフラグ？（未解明）</span><br /><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>font(<span class="decorationC" style="color:deepskyblue;">&apos;IPAex明朝,IPAexMincho:Regular&apos;</span>); <span class="decorationC" style="color:darkgray;">&#35; フォント</span><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>fgcolor(<span class="decorationC" style="color:deepskyblue;">&apos;red&apos;</span>); <span class="decorationC" style="color:darkgray;">&#35; 文字色</span><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>fontsize(30); <span class="decorationC" style="color:darkgray;">&#35; フォントサイズ</span><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>moveTo(20, 100); <span class="decorationC" style="color:darkgray;">&#35; 始点 x, y</span><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>string(&quot;<span class="decorationC" style="color:deepskyblue;">日本語フォント表示</span><span class="decorationC" style="color:olivedrab;">\n</span><span class="decorationC" style="color:deepskyblue;">Raspberry Pi</span><span class="decorationC" style="color:olivedrab;">\n</span><span class="decorationC" style="color:deepskyblue;">1234567890</span>&quot;); <span class="decorationC" style="color:darkgray;">&#35; 文字列（最後に記述）</span><br /><br /><span class="decorationC" style="color:darkgray;">&#35; ファイルへ出力</span><br /><span class="decorationC" style="color:darkgray;">&#35;open(IMG, &quot;&gt; gd_out1.gif&quot;); &#35; GIF で出力</span><br /><span class="decorationC" style="color:darkgray;">&#35;open(IMG, &quot;&gt; gd_out1.jpg&quot;); &#35; JPEG で出力</span><br /><span class="decorationC" style="color:mediumblue;">open</span>(IMG, <span class="decorationC" style="color:deepskyblue;">&quot;&gt; gd_out1.png&quot;</span>); <span class="decorationC" style="color:darkgray;">&#35; PNG で出力</span><br /><span class="decorationC" style="color:mediumblue;">binmode</span> IMG; <span class="decorationC" style="color:darkgray;">&#35; バイナリ・ストリームへ書き込む</span><br /><span class="decorationC" style="color:darkgray;">&#35;print IMG $img_obj-&gt;gif(); &#35; GIF で出力</span><br /><span class="decorationC" style="color:darkgray;">&#35;print IMG $img_obj-&gt;jpeg(100); &#35; JPEG (品質：0〜100) で出力</span><br /><span class="decorationC" style="color:mediumblue;">print</span> IMG <span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>png(); <span class="decorationC" style="color:darkgray;">&#35; PNG で出力</span><br /><span class="decorationC" style="color:mediumblue;">close</span>(IMG);<br /><br />----------<br /><br />実行すると以下のように読み込んだ画像の上に文字を描き込んだ画像が出力されます<br /><img class="embeddedimage " width="500" height="689" src="https://room.dengeki.jp/images/202111201035162-admin.png" alt="202111201035162-admin.png"><br />ちゃんと文字が描き込まれていますね　なお色数の多い JPEG と PNG は True Color フラグとなる「1」を指定しておかないと色が正しく再現されないような感じでした<br /><br />　　：<br /><br />お次は複数の画像を読み込んで 1 枚の画像に合成するってのをやってみます<br /><a class="url urlimage selflink" href="https://yqn.f5.si/pic/gd_test2.gif"><img src="https://yqn.f5.si/pic/gd_test2.gif" class="embeddedimage" alt="gd_test2.gif"></a> <a class="url urlimage selflink" href="https://yqn.f5.si/pic/gd_test2.jpg"><img src="https://yqn.f5.si/pic/gd_test2.jpg" class="embeddedimage" alt="gd_test2.jpg"></a> <a class="url urlimage selflink" href="https://yqn.f5.si/pic/gd_test2.png"><img src="https://yqn.f5.si/pic/gd_test2.png" class="embeddedimage" alt="gd_test2.png"></a><br />&#91;サンプル画像&#93;<br /><br />----------<br /><br /><span class="decorationC" style="color:darkgray;">&#35;!/usr/bin/perl</span><br /><span class="decorationC" style="color:cornflowerblue;">use</span> GD<span class="decorationC" style="color:firebrick;">::</span>Simple;<br /><br /><span class="decorationC" style="color:orange;">$img_obj</span> <span class="decorationC" style="color:firebrick;">=</span> GD<span class="decorationC" style="color:firebrick;">::</span>Simple<span class="decorationC" style="color:firebrick;">-&gt;</span><span class="decorationC" style="color:mediumblue;">new</span>(500, 500, 1); <span class="decorationC" style="color:darkgray;">&#35; 最後の「1」は True Color のフラグ？（未解明）</span><br /><br /><span class="decorationC" style="color:orange;">$img_gif</span> <span class="decorationC" style="color:firebrick;">=</span> GD<span class="decorationC" style="color:firebrick;">::</span>Image<span class="decorationC" style="color:firebrick;">-&gt;</span>newFromGif(<span class="decorationC" style="color:deepskyblue;">&quot;./gd_test2.gif&quot;</span>); <span class="decorationC" style="color:darkgray;">&#35; GIF 画像の時</span><br /><span class="decorationC" style="color:orange;">$img_jpg</span> <span class="decorationC" style="color:firebrick;">=</span> GD<span class="decorationC" style="color:firebrick;">::</span>Image<span class="decorationC" style="color:firebrick;">-&gt;</span>newFromJpeg(<span class="decorationC" style="color:deepskyblue;">&quot;./gd_test2.jpg&quot;</span>, 1); <span class="decorationC" style="color:darkgray;">&#35; JPEG 画像の時　最後の「1」は True Color のフラグ？（未解明）</span><br /><span class="decorationC" style="color:orange;">$img_png</span> <span class="decorationC" style="color:firebrick;">=</span> GD<span class="decorationC" style="color:firebrick;">::</span>Image<span class="decorationC" style="color:firebrick;">-&gt;</span>newFromPng(<span class="decorationC" style="color:deepskyblue;">&quot;./gd_test2.png&quot;</span>, 1); <span class="decorationC" style="color:darkgray;">&#35; PNG 画像の時　最後の「1」は True Color のフラグ？（未解明）</span><br /><br /><span class="decorationC" style="color:darkgray;">&#35; 参考までに…読み込んだ画像の簡易な情報を表示</span><br />(<span class="decorationC" style="color:orange;">$width</span>, <span class="decorationC" style="color:orange;">$height</span>) <span class="decorationC" style="color:firebrick;">=</span> <span class="decorationC" style="color:orange;">$img_gif</span><span class="decorationC" style="color:firebrick;">-&gt;</span>getBounds();<br /><span class="decorationC" style="color:orange;">$is_truecolor</span> <span class="decorationC" style="color:firebrick;">=</span> <span class="decorationC" style="color:orange;">$img_gif</span><span class="decorationC" style="color:firebrick;">-&gt;</span>isTrueColor();<br />print <span class="decorationC" style="color:deepskyblue;">&quot;GIF:&#91;</span><span class="decorationC" style="color:orange;">$width</span><span class="decorationC" style="color:deepskyblue;">&#93;&#91;</span><span class="decorationC" style="color:orange;">$height</span><span class="decorationC" style="color:deepskyblue;">&#93;&#91;</span><span class="decorationC" style="color:orange;">$is_truecolor</span><span class="decorationC" style="color:deepskyblue;">&#93;</span><span class="decorationC" style="color:olivedrab;">\n</span><span class="decorationC" style="color:deepskyblue;">&quot;</span>;<br />(<span class="decorationC" style="color:orange;">$width</span>, <span class="decorationC" style="color:orange;">$height</span>) <span class="decorationC" style="color:firebrick;">=</span> <span class="decorationC" style="color:orange;">$img_jpg</span><span class="decorationC" style="color:firebrick;">-&gt;</span>getBounds();<br /><span class="decorationC" style="color:orange;">$is_truecolor</span> <span class="decorationC" style="color:firebrick;">=</span> <span class="decorationC" style="color:orange;">$img_jpg</span><span class="decorationC" style="color:firebrick;">-&gt;</span>isTrueColor();<br />print <span class="decorationC" style="color:deepskyblue;">&quot;JPG:&#91;</span><span class="decorationC" style="color:orange;">$width</span><span class="decorationC" style="color:deepskyblue;">&#93;&#91;</span><span class="decorationC" style="color:orange;">$height</span><span class="decorationC" style="color:deepskyblue;">&#93;&#91;</span><span class="decorationC" style="color:orange;">$is_truecolor</span><span class="decorationC" style="color:deepskyblue;">&#93;</span><span class="decorationC" style="color:olivedrab;">\n</span><span class="decorationC" style="color:deepskyblue;">&quot;</span>;<br />(<span class="decorationC" style="color:orange;">$width</span>, <span class="decorationC" style="color:orange;">$height</span>) <span class="decorationC" style="color:firebrick;">=</span> <span class="decorationC" style="color:orange;">$img_png</span><span class="decorationC" style="color:firebrick;">-&gt;</span>getBounds();<br /><span class="decorationC" style="color:orange;">$is_truecolor</span> <span class="decorationC" style="color:firebrick;">=</span> <span class="decorationC" style="color:orange;">$img_png</span><span class="decorationC" style="color:firebrick;">-&gt;</span>isTrueColor();<br />print <span class="decorationC" style="color:deepskyblue;">&quot;PNG:&#91;</span><span class="decorationC" style="color:orange;">$width</span><span class="decorationC" style="color:deepskyblue;">&#93;&#91;</span><span class="decorationC" style="color:orange;">$height</span><span class="decorationC" style="color:deepskyblue;">&#93;&#91;</span><span class="decorationC" style="color:orange;">$is_truecolor</span><span class="decorationC" style="color:deepskyblue;">&#93;</span><span class="decorationC" style="color:olivedrab;">\n</span><span class="decorationC" style="color:deepskyblue;">&quot;</span>;<br /><br /><span class="decorationC" style="color:darkgray;">&#35; コピー元オブジェクト, コピー先X座標, コピー先Y座標, コピー元X座標, コピー元Y座標, 横サイズ, 縦サイズ</span><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>copy(<span class="decorationC" style="color:orange;">$img_gif</span>, 0, 150, 200, 140, 200, 200); <span class="decorationC" style="color:darkgray;">&#35; GIF 画像をコピーする</span><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>copy(<span class="decorationC" style="color:orange;">$img_jpg</span>, 180, 280, 240, 135, 200, 200); <span class="decorationC" style="color:darkgray;">&#35; JPEG 画像をコピーする</span><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>copy(<span class="decorationC" style="color:orange;">$img_png</span>, 300, 100, 140, 140, 200, 200); <span class="decorationC" style="color:darkgray;">&#35; PNG 画像をコピーする</span><br /><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>font(<span class="decorationC" style="color:deepskyblue;">&apos;IPAex明朝,IPAexMincho:Regular&apos;</span>); <span class="decorationC" style="color:darkgray;">&#35; フォント</span><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>fgcolor(<span class="decorationC" style="color:deepskyblue;">&apos;red&apos;</span>); <span class="decorationC" style="color:darkgray;">&#35; 文字色</span><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>fontsize(30); <span class="decorationC" style="color:darkgray;">&#35; フォントサイズ</span><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>moveTo(20, 100); <span class="decorationC" style="color:darkgray;">&#35; 始点 x, y</span><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>string(&quot;<span class="decorationC" style="color:deepskyblue;">日本語フォント表示</span><span class="decorationC" style="color:olivedrab;">\n</span><span class="decorationC" style="color:deepskyblue;">Raspberry Pi</span><span class="decorationC" style="color:olivedrab;">\n</span><span class="decorationC" style="color:deepskyblue;">1234567890</span>&quot;); <span class="decorationC" style="color:darkgray;">&#35; 文字列（最後に記述）</span><br /><br /><span class="decorationC" style="color:darkgray;">&#35; ファイルへ出力</span><br /><span class="decorationC" style="color:darkgray;">&#35;open(IMG, &quot;&gt; gd_out1.gif&quot;); &#35; GIF で出力</span><br /><span class="decorationC" style="color:darkgray;">&#35;open(IMG, &quot;&gt; gd_out1.jpg&quot;); &#35; JPEG で出力</span><br /><span class="decorationC" style="color:mediumblue;">open</span>(IMG, <span class="decorationC" style="color:deepskyblue;">&quot;&gt; gd_out1.png&quot;</span>); <span class="decorationC" style="color:darkgray;">&#35; PNG で出力</span><br /><span class="decorationC" style="color:mediumblue;">binmode</span> IMG; <span class="decorationC" style="color:darkgray;">&#35; バイナリ・ストリームへ書き込む</span><br /><span class="decorationC" style="color:darkgray;">&#35;print IMG $img_obj-&gt;gif(); &#35; GIF で出力</span><br /><span class="decorationC" style="color:darkgray;">&#35;print IMG $img_obj-&gt;jpeg(100); &#35; JPEG (品質：0〜100) で出力</span><br /><span class="decorationC" style="color:mediumblue;">print</span> IMG <span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>png(); <span class="decorationC" style="color:darkgray;">&#35; PNG で出力</span><br /><span class="decorationC" style="color:mediumblue;">close</span>(IMG);<br /><br />----------<br /><br />実行すると以下のように読み込んだ画像の指定範囲を切り抜き合成してその上に文字を描き込んだ画像が出力されます<br /><img class="embeddedimage " width="500" height="500" src="https://room.dengeki.jp/images/202111201035161-admin.png" alt="202111201035161-admin.png"><br />なお画像の copy にはパラメータを全て指定する必要があるようです　ちょっと面倒ですね(-_-；)　今回は指定範囲を切り抜くような形でコピーしたけど…サイズが不定な画像を読み込んだ際に正しく範囲指定できるように読み込んだ画像サイズを取得できる getBounds ってのも使っているので参考までに<br /><br />なお既存のファイルを読み込む際に newFromGif や newFromJpeg や newFromPng といった感じに予め画像フォーマットを知っておく必要があるようです　しかしざっと調べた感じでは GD で画像フォーマットを調べる術がないようなんで…ちょっと困りますね<br />そこで標準的に用意されている file コマンドを使って画像フォーマットを調べるサンプルを即興で用意してみました<br /><br />----------<br /><br /><span class="decorationC" style="color:darkgray;">&#35;!/usr/bin/perl</span><br /><br /><span class="decorationC" style="color:orange;">$cmd</span> = <span class="decorationC" style="color:deepskyblue;">&apos;file -b -i&apos;</span>; <span class="decorationC" style="color:darkgray;">&#35; file コマンドを使う</span><br /><span class="decorationC" style="color:orange;">$file</span> = <span class="decorationC" style="color:deepskyblue;">&apos;./gd_test2.gif&apos;</span>; <span class="decorationC" style="color:darkgray;">&#35; 画像ファイル名 &#91;GIF&#93;</span><br /><span class="decorationC" style="color:darkgray;">&#35;$file = &apos;./gd_test2.jpg&apos;; &#35; 画像ファイル名 &#91;JPEG&#93;</span><br /><span class="decorationC" style="color:darkgray;">&#35;$file = &apos;./gd_test2.png&apos;; &#35; 画像ファイル名 &#91;PNG&#93;</span><br /><br />chomp(<span class="decorationC" style="color:orange;">$res</span> = `<span class="decorationC" style="color:orange;">$cmd</span> <span class="decorationC" style="color:orange;">$file</span>`); <span class="decorationC" style="color:darkgray;">&#35; コマンドを実行して出力を取り込む</span><br />if (<span class="decorationC" style="color:orange;">$?</span>) { die <span class="decorationC" style="color:deepskyblue;">&quot;Command error:&quot;</span>; } <span class="decorationC" style="color:darkgray;">&#35; 何らかのエラーが発生</span><br />print &quot;<span class="decorationC" style="color:orange;">$res</span><span class="decorationC" style="color:olivedrab;">\n</span>&quot;; <span class="decorationC" style="color:darkgray;">&#35; コマンドを実行した出力はこんな感じ</span><br /><br />if (<span class="decorationC" style="color:orange;">$res</span> =~ <span class="decorationC" style="color:deepskyblue;">/^cannot open/</span>) { <span class="decorationC" style="color:darkgray;">&#35; file コマンドが何らかのエラーを返した</span><br />&nbsp;&nbsp;print <span class="decorationC" style="color:deepskyblue;">&quot;File error:</span> <span class="decorationC" style="color:orange;">$file</span><span class="decorationC" style="color:olivedrab;">\n</span><span class="decorationC" style="color:deepskyblue;">&quot;</span>;<br />} elsif (<span class="decorationC" style="color:orange;">$res</span> =~ <span class="decorationC" style="color:deepskyblue;">/^image</span><span class="decorationC" style="color:olivedrab;">\/</span><span class="decorationC" style="color:deepskyblue;">gif;/</span>) { <span class="decorationC" style="color:darkgray;">&#35; GIF ファイルらしい</span><br />&nbsp;&nbsp;print &quot;[<span class="decorationC" style="color:olivedrab;">\$</span><span class="decorationC" style="color:deepskyblue;">img_obj = GD::Simple-&gt;newFromGif(</span><span class="decorationC" style="color:olivedrab;">\&quot;</span><span class="decorationC" style="color:orange;">$file</span><span class="decorationC" style="color:olivedrab;">\&quot;</span><span class="decorationC" style="color:deepskyblue;">);</span> を使う]<span class="decorationC" style="color:olivedrab;">\n</span><span class="decorationC" style="color:deepskyblue;">&quot;</span>;<br />} elsif (<span class="decorationC" style="color:orange;">$res</span> =~ <span class="decorationC" style="color:deepskyblue;">/^image</span><span class="decorationC" style="color:olivedrab;">\/</span><span class="decorationC" style="color:deepskyblue;">jpeg;/</span>) { <span class="decorationC" style="color:darkgray;">&#35; JPEG ファイルらしい</span><br />&nbsp;&nbsp;print &quot;[<span class="decorationC" style="color:olivedrab;">\$</span><span class="decorationC" style="color:deepskyblue;">img_obj = GD::Simple-&gt;newFromJpeg(</span><span class="decorationC" style="color:olivedrab;">\&quot;</span><span class="decorationC" style="color:orange;">$file</span><span class="decorationC" style="color:olivedrab;">\&quot;</span><span class="decorationC" style="color:deepskyblue;">);</span> を使う]<span class="decorationC" style="color:olivedrab;">\n</span><span class="decorationC" style="color:deepskyblue;">&quot;</span>;<br />} elsif (<span class="decorationC" style="color:orange;">$res</span> =~ <span class="decorationC" style="color:deepskyblue;">/^image</span><span class="decorationC" style="color:olivedrab;">\/</span><span class="decorationC" style="color:deepskyblue;">png;/</span>) { <span class="decorationC" style="color:darkgray;">&#35; PNG ファイルらしい</span><br />&nbsp;&nbsp;print &quot;[<span class="decorationC" style="color:olivedrab;">\$</span><span class="decorationC" style="color:deepskyblue;">img_obj = GD::Simple-&gt;newFromPng(</span><span class="decorationC" style="color:olivedrab;">\&quot;</span><span class="decorationC" style="color:orange;">$file</span><span class="decorationC" style="color:olivedrab;">\&quot;</span><span class="decorationC" style="color:deepskyblue;">);</span> を使う]<span class="decorationC" style="color:olivedrab;">\n</span><span class="decorationC" style="color:deepskyblue;">&quot;</span>;<br />} else { <span class="decorationC" style="color:darkgray;">&#35; それ以外のファイルっぽい</span><br />&nbsp;&nbsp;print <span class="decorationC" style="color:deepskyblue;">&quot;扱えないファイルです(-_-；)</span><span class="decorationC" style="color:olivedrab;">\n</span><span class="decorationC" style="color:deepskyblue;">&quot;</span>;<br />}<br /><br />----------<br /><br />file コマンドについて詳しく調べてないんでアレなんだけど…これで概ね画像フォーマットを特定できると思います　この辺ちょっと面倒ですね(-_-；)<br /><br />まぁそんなこなんで時既に情報が古すぎて調べられない GD::Simple のアレこれをまとめてみました　この GD::Simple は…その昔の N88-Disk Basic の LINE 文や CIRCLE 文とかでお絵描きしてた頃のようなシンプルな操作で作画できて懐かしく思ったりしながら愛用しています　しょーみこれを今さらわざわざ使おうって思う人も居ないかなーって思いつつ今後の参考ってことで残しておきます　長々とお疲れさまでした！ <a href="https://room.dengeki.jp/tegalog.cgi?tag=%52%61%73%70%62%65%72%72%79%20%50%69" class="taglink" title="Raspberry Pi">#&#91;Raspberry Pi&#93;</a> <a href="https://room.dengeki.jp/tegalog.cgi?tag=%50%65%72%6c" class="taglink" title="Perl">#Perl</a> -- Posted by 猫山ぽるか 〔7610文字〕 No.9 ]]></description>
	<link>https://room.dengeki.jp/tegalog.cgi?postid=9</link>
	<guid>https://room.dengeki.jp/tegalog.cgi?postid=9</guid>
	<category>info</category>
	<pubDate>Sat, 20 Nov 2021 10:26:41 +0900</pubDate>
</item>
<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ ラズパイの頻度低めだけど知っておきたい設定メモ Vol.3 ]]></title>
	<description><![CDATA[ ラズパイの頻度低めだけど知っておきたい設定メモ Vol.3<br /><img class="embeddedimage " width="200" height="200" src="https://room.dengeki.jp/images/20211203180402-admin.png" alt="20211203180402-admin.png"><br />　<br />・ラズパイとファイルのやり取りしたい<br />・ラズパイのアプリを PC 上で実行する？<br /><br />　　：<br /><br /><b class="decorationB">-----</b> <b class="decorationB">ラズパイとファイルのやりとりしたい</b> <b class="decorationB">-----</b><br /><br />ファイル共有に samba サーバを建てるほどじゃないんだけど… PC とちょっとしたファイルのやりとりをしたい！って場面はちょくちょくあると思います　そんな時は scp コマンドを使うと良いみたいです<br /><br />使い方<br /><span class="decorationC" style="color:green;">scp &#91;オプション&#93; コピー元 コピー先</span><br /><br />オプションはいろいろあるけど…よく使うものを勝手に抜粋（汗<br /><span class="decorationC" style="color:green;">-p</span>　元のファイルの変更時間とアクセス時間およびモードを維持します<br /><span class="decorationC" style="color:green;">-r</span>　ディレクトリ全体を再帰的にコピーします<br /><br />PC からラズパイにファイルを送信する　その１<br /><span class="decorationC" style="color:green;">scp ./dir/filename.ext pi@hostname:</span><br />PC 上の ./dir/filename.ext ってファイルをラズパイにコピーする　この場合…ユーザ pi のホームフォルダ (/home/pi) に filename.ext がコピーされる<br /><br />ラズパイから PC にファイルを受信する　その１<br /><span class="decorationC" style="color:green;">scp pi@hostname:/var/www.html/index.html ./</span><br />ラズパイ上の /var/www.html/index.html が PC 上のカレントフォルダに index.html としてコピーされる<br /><br />PC からラズパイにフォルダを送信する　その２<br /><span class="decorationC" style="color:green;">scp -pr ./pic pi@hostname:</span><br />PC 上の ./pic ってフォルダとその中身の全てをファイル更新日時・モードを保持したままラズパイにコピーする　この場合…ユーザ pi のホームフォルダ (/home/pi) に pic フォルダを作成してコピーする<br /><br />ラズパイから PC にフォルダを受信する　その２<br /><span class="decorationC" style="color:green;">scp -pr pi@hostname:/etc/apache2 ./</span><br />ラズパイ上の /etc/apache2 ってフォルダとその中身の全てをファイル更新日時・モードを保持したまま PC に apache2 フォルダを作成してコピーする<br />※ ただし /etc/apache2 はユーザ pi で読めるけど…逆に書き込もうとすると root 権限が無いんで失敗しますが<br /><br />hostname は IP アドレスでも OK です　ファイル名にはワイルドカードも使えるようです<br /><br />2018 年 4 月頃のアップデートで Windows 10 に OpenSSH ってのが導入されているらしく…その時に scp コマンドが入ったようです<br /><img class="embeddedimage " width="800" height="636" src="https://room.dengeki.jp/images/20211024175230-admin.png" alt="20211024175230-admin.png"><br /><img class="embeddedimage " width="1056" height="800" src="https://room.dengeki.jp/images/202110241752301-admin.png" alt="202110241752301-admin.png"><br />試しに使ってみたところちゃんとコピーできたようです<br /><br />　　：<br /><br /><b class="decorationB">-----</b> <b class="decorationB">ラズパイのアプリを PC 上で実行する？</b> <b class="decorationB">-----</b><br /><br />ラズパイ上で動くアプリケーションの画面を PC 上に持ってくることができるようです<br /><br />使い方<br /><span class="decorationC" style="color:green;">ssh &#91;オプション&#93; pi@hostname</span><br /><br />オプションはいろいろあるけど…よく使うものを勝手に抜粋（汗<br /><span class="decorationC" style="color:green;">-Y</span>　信頼できるX11転送を有効にします<br /><span class="decorationC" style="color:green;">-C</span>　データ転送を圧縮します<br /><br />普通に SSH による接続なんですが…ファイルマネージャ (pcmanfm) とかのグラフィカルなアプリケーションの実行画面を PC 上で再現できるようになるようです<br />SSH でログインした後にコマンドラインに実行したいアプリケーションのコマンドを打ち込み実行します<br /><span class="decorationC" style="color:green;">pcmanfm</span> ：ファイルマネージャ<br /><span class="decorationC" style="color:green;">lxtask</span> ：タスクマネージャ<br /><span class="decorationC" style="color:green;">lxterminal</span> ：LXTerminal<br />例えば上記のようなコマンドです<br /><br /><img class="embeddedimage " width="1600" height="1200" src="https://room.dengeki.jp/images/20211024175159-admin.png" alt="20211024175159-admin.png"><br />Ubuntu MATE 上に再現されたラズパイのアプリケーション画面　心もち再現しきれてないものもあるけどご愛嬌かな<br />ファイルマネージャからイメージビューワなんかを起動するとその画面も PC 上に出てきます<br />ただしログインしたユーザ権限で動作できるアプリケーションに限るようです<br />macOS 系ではできたって話を聞いたことがあります　Windows 系ではできないかも知れません（汗<br /><br />そろそろネタが尽きてきたかな…って感じで長々とお疲れさまでした！ <a href="https://room.dengeki.jp/tegalog.cgi?tag=%52%61%73%70%62%65%72%72%79%20%50%69" class="taglink" title="Raspberry Pi">#&#91;Raspberry Pi&#93;</a> <a href="https://room.dengeki.jp/tegalog.cgi?tag=%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89%e3%83%98%e3%83%ab%e3%83%97" class="taglink" title="コマンドヘルプ">#コマンドヘルプ</a><br /><small class="decorationS"><br />　　●<span class="decorationM" style="background-color:lightpink;"><a href="https://room.dengeki.jp/tegalog.cgi?postid=6" class="postidlink">ラズパイの頻度低めだけど知っておきたい設定メモ Vol.3</a></span><br />　　●<span class="decorationM" style="background-color:lightcyan;"><a href="https://room.dengeki.jp/tegalog.cgi?postid=5" class="postidlink">ラズパイの頻度低めだけど知っておきたい設定メモ Vol.2</a></span><br />　　●<span class="decorationM" style="background-color:lightcyan;"><a href="https://room.dengeki.jp/tegalog.cgi?postid=4" class="postidlink">ラズパイの頻度低めだけど知っておきたい設定メモ Vol.1</a></span><br />　　●<span class="decorationM" style="background-color:lightcyan;"><a href="https://room.dengeki.jp/tegalog.cgi?postid=3" class="postidlink">ラズパイで Apache2 サーバを建ててゆるい設定をする</a></span><br />　　●<span class="decorationM" style="background-color:lightcyan;"><a href="https://room.dengeki.jp/tegalog.cgi?postid=2" class="postidlink">モニタ無しでラズパイを VNC 接続できるとこまでセットアップ</a></span><br /></small> -- Posted by 猫山ぽるか 〔2042文字〕 No.6 ]]></description>
	<link>https://room.dengeki.jp/tegalog.cgi?postid=6</link>
	<guid>https://room.dengeki.jp/tegalog.cgi?postid=6</guid>
	<category>info</category>
	<pubDate>Sun, 24 Oct 2021 16:41:43 +0900</pubDate>
</item>
<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ ラズパイの頻度低めだけど知っておきたい設定メモ Vol.2 ]]></title>
	<description><![CDATA[ ラズパイの頻度低めだけど知っておきたい設定メモ Vol.2<br /><img class="embeddedimage " width="200" height="200" src="https://room.dengeki.jp/images/20211203175809-admin.png" alt="20211203175809-admin.png"><br />　<br />・テキストエディタ nano の超基本の使い方<br />・ユーザを切り替えて root で作業したい<br />・ラズパイは sudo した時にパスワードを聞かれないのは何故？<br /><br />　　：<br /><br /><b class="decorationB">-----</b> <b class="decorationB">テキストエディタ nano の超基本の使い方</b> <b class="decorationB">-----</b><br /><br />端末上(LX Terminal等)でテキストファイルを編集するには vi か nano を使うことになるんだけど… vi は操作感が少々特殊でとっつきにくいんでその辺が判りやすい nano を使うことが多いのかな？って事でその nano を初めて使う方向けの超基本の使い方の解説です<br /><br />コマンド名は <span class="decorationC" style="color:green;">nano</span> です　管理者権限で使いたい時は <span class="decorationC" style="color:green;">sudo nano</span> って感じで使います<br /><span class="decorationC" style="color:green;">nano</span> もしくは <span class="decorationC" style="color:green;">sudo nano</span> とコマンド名のみで起動すると「新規ファイル」の編集として起動します　<span class="decorationC" style="color:green;">nano 「ファイル名」</span> とファイル名を付けて起動すると「ファイル名のファイル」を編集します<br /><br /><img class="embeddedimage " width="736" height="479" src="https://room.dengeki.jp/images/202110181533153-admin.png" alt="202110181533153-admin.png"><br /><span class="decorationC" style="color:green;">nano</span> とだけ打ち込み起動した状態<br />よく使う（と思われる）コマンドが下部に記載されています<br />この中の 「<span class="decorationM" style="background-color:white;">^G</span> ヘルプ」 とか 「<span class="decorationM" style="background-color:white;">^X</span> 終了」 の「^」意味は以下のようになっています<br /><br /><small class="decorationS">ショートカットキーの記法は以下の通りです。<span class="decorationC" style="color:red;">(^)</span>で表記されているショートカットは<span class="decorationC" style="color:red;">Ctrlキー</span>を押すか、<span class="decorationC" style="color:red;">Escキーを二回続けて押す</span>ことを表してします。<span class="decorationC" style="color:green;">(M-)</span>で表記されているショートカットは<span class="decorationC" style="color:green;">Altキー</span>、<span class="decorationC" style="color:green;">Cmdキー</span>、<span class="decorationC" style="color:green;">Escキー</span>などのメタキーを押して入力します。<br />&nbsp;また、Escキーを二回押した後に000から255までの十進数を入力することで、コードに対応する文字を入力することができます。以下のキーストロークは主なエディタのウィンドウで使用できます。代替のキーストロークは括弧で囲って表記されます。</small><br /><br />試しに <span class="decorationC" style="color:red;">Ctrl</span> キーを押しながら <span class="decorationC" style="color:red;">G</span> キーを押してみましょう<br /><img class="embeddedimage " width="736" height="479" src="https://room.dengeki.jp/images/202110181533152-admin.png" alt="202110181533152-admin.png"><br />nano のヘルプが表示されました<br />長くて表示しきれてないんでキーボードの ↑ キーと ↓ キーを使ってスクロールさせます<br />ヘルプの終了は <span class="decorationC" style="color:red;">Ctrl</span> キーを押しながら <span class="decorationC" style="color:red;">X</span> キーを押します<br />いっぱいコマンドがあって覚えきれなさそうだけど…実際には「ちょっと編集を」って感じなんで数個のコマンドを使うだけになると思います<br /><br />そんなよく使うコマンド例<br /><br /><span class="decorationC" style="color:red;">Ctrl</span> + <span class="decorationC" style="color:red;">X</span> ：nano の終了　ファイルに変更がなければそのまま終了します　変更があれば保存するか破棄するか聞いてきます<br /><span class="decorationC" style="color:red;">Ctrl</span> + <span class="decorationC" style="color:red;">O</span> ：ファイルの書き込み　新規ファイルとして編集していればファイル名を聞いてきます　既存ファイルを編集していればそのファイル名が表示されそこに保存します<br /><span class="decorationC" style="color:red;">Ctrl</span> + <span class="decorationC" style="color:red;">S</span> ：ファイルを確認なしで保存する　慣れてくるとこれをよく使います<br /><span class="decorationC" style="color:red;">Ctrl</span> + <span class="decorationC" style="color:red;">W</span> ：文字列の検索　指定した文字列が見つかればカーソルがその文字列の場所に移動する　さらに次の文字列を探す場合には <span class="decorationC" style="color:green;">Alt</span> + <span class="decorationC" style="color:green;">W</span> もしくは <span class="decorationC" style="color:green;">Alt</span> + <span class="decorationC" style="color:green;">↓</span> で…逆向きに探す場合には <span class="decorationC" style="color:green;">Alt</span> + <span class="decorationC" style="color:green;">Q</span> もしくは <span class="decorationC" style="color:green;">Alt</span> + <span class="decorationC" style="color:green;">↑</span> と操作します<br /><span class="decorationC" style="color:red;">Ctrl</span> + <span class="decorationC" style="color:red;">&#47;</span> ：文字列の置換　探す文字列を指定した後に置き換える文字列を指定します　見つかった時に「１箇所置換」するか「全部を置換」するかを聞いてきます<br /><span class="decorationC" style="color:green;">Alt</span> + <span class="decorationC" style="color:green;">&#35;</span> ：コメント行の切り替え　カーソルがいる行の先頭に <span class="decorationC" style="color:lightseagreen;">&#35;</span> を付ける/付けないを繰り返す　わりと便利なんでよく使う<br /><br />だいたいこんなもんですかね　しょーみもっと込み入った編集をしたい時には GUI で操作できる <span class="decorationC" style="color:green;">mousepad</span> とかを使ったほうが判りやすくて便利だと思います　ただ <span class="decorationC" style="color:green;">nano</span> は諸々の設定作業なんかで「使わない訳にはいかない」テキスト・エディタなんで最低限の操作は覚えておきたいものです<br /><br />　　：<br /><br /><b class="decorationB">-----</b> <b class="decorationB">ユーザを切り替えて root で作業したい</b> <b class="decorationB">-----</b><br /><br />サーバの設定をしてる時とかに…いちいち sudo + コマンド ってやるんがめんどくさい！！(-_-&#35;)って時に感情に任せて root にチェンジして作業したいと思ったことはありませんか？　私はたまにあります…って事なんでその辺の話を少々<br /><br /><img class="embeddedimage " width="1056" height="800" src="https://room.dengeki.jp/images/202110181533155-admin.png" alt="202110181533155-admin.png"><br />通常はユーザ pi で作業してるんだけどこれをユーザ切り替えの su コマンドを使って管理者 root になろうとするんだけど…認証失敗して root になれません　これは root にパスワードが設定されてないんで「パスワードによる認証ができない」ってのが原因のようです<br /><br />まぁこれを解決するには root にパスワードを設定すればいいんだけど…世間的にはセキュリティ云々の事情で root にパスワードを設定すべきではないって事なんでちょっと躊躇しちゃいますね　※ root にパスワードを設定すると SSH などで root ログインできるようになるんで好ましくないらしいのです<br /><br />しかしこれが実機の前に居るのであれば別の方法でどうにかできます　LXTerminal を sudo で起動してみましょう<br /><br /><img class="embeddedimage " width="1056" height="800" src="https://room.dengeki.jp/images/202110181533154-admin.png" alt="202110181533154-admin.png"><br /><span class="decorationC" style="color:green;">sudo x-terminal-emulator</span><br />無事(？)に root に切り替えることができました<br />でもまぁ何でもできる管理者 root なんで…くれぐれも慎重な操作をお願いします（汗<br /><br />※ 追記 ※<br />別のシェルでログインを試みるって手法をもっと試してみるっていうか…なんか su コマンドにシェルを指定するオプションがあるのに気づいたんでそっちも試してみることにします<br /><span class="decorationC" style="color:green;">sudo su -s /bin/bash root</span><br />これで root に切り替えることができました　こっちのほうがスマートな操作って感じなのかな<br /><br />ちなみにオプション指定の違いがあるっていうか…<br /><img class="embeddedimage " width="736" height="479" src="https://room.dengeki.jp/images/20211205041659-admin.png" alt="20211205041659-admin.png"><br /><span class="decorationC" style="color:green;">sudo su -s /bin/bash root</span><br /><span class="decorationC" style="color:green;">sudo su -s /bin/bash <span class="decorationC" style="color:red;">-</span> root</span><br />「-」オプションを付けない時はコマンドを実行したユーザのホームディレクトリ・環境変数が引き継がれて<br />「-」オプションを付た時は指定したユーザのホームディレクトリ・環境変数に設定されるようです<br /><br />※ さらに追記 ※<br />もうちょっとシンプルにっていうか <span class="decorationC" style="color:green;">sudo -i</span> や <span class="decorationC" style="color:green;">sudo su</span> や <span class="decorationC" style="color:green;">sudo su -</span> でもいいみたい<br />この場合もそれぞれ環境変数の引き継ぎに違いがあったりするようです　使いやすい手法を覚えておきタイネ！<br /><br />　　：<br /><br /><b class="decorationB">-----</b> <b class="decorationB">ラズパイは sudo した時にパスワードを聞かれないのは何故？</b> <b class="decorationB">-----</b><br /><br />Ubuntu などを使っている時に sudo すると…<br /><img class="embeddedimage " width="736" height="479" src="https://room.dengeki.jp/images/202110181533151-admin.png" alt="202110181533151-admin.png"><br />パスワードを聞かれます<br /><br /><img class="embeddedimage " width="736" height="479" src="https://room.dengeki.jp/images/20211018153315-admin.png" alt="20211018153315-admin.png"><br />でも Raspberry Pi OS の sudo だとパスワードを聞かれません　これは何故なんでしょう？<br /><br />まぁ sudo がそう云う設定になってるんですけどね…って事でその設定を見てみましょう　sudo の設定内容は <span class="decorationC" style="color:green;">sudo cat /etc/sudoers</span> で確認することができます<br />その中に %sudo ALL=(ALL:ALL) ALL なんて行があります　これはグループ sudo に属する全てのユーザが全てのコマンドを実行できるって定義らしいです<br /><br />それではグループ sudo に誰が属しているのか見てみましょう　これは <span class="decorationC" style="color:green;">sudo getent group sudo</span> で確認できます　おそらく sudo:x:27:pi ってなってると思うんだけど…まぁグループ sudo にユーザ pi が含まれているのが判ります　この設定によりユーザ pi が sudo した時に全てのコマンドが使えるって事になるらしいです<br /><br />ちなみに /etc/sudoers は極めて重要なファイルなんで直接編集しないほうがいいらしいです　これを編集するには専用コマンドの <span class="decorationC" style="color:green;">sudo visudo</span> を使います　なんでも書き込んだ内容に間違いがないか構文チェックして正しければ書き込むって感じになってるらしいです<br /><br />まぁそれはともかく sudo した時にパスワードを聞かれないって話でしたよね　これはさらに細やかな設定ファイルが /etc/sudoers.d/ に入ってるらしいのでそれを <span class="decorationC" style="color:green;">sudo cat /etc/sudoers.d/010_pi-nopasswd</span> で確認してみましょう<br />すると pi ALL=(ALL) NOPASSWD: ALL ってのがあります　この NOPASSWD ってのがパスワードを聞かれないための設定らしいです<br />この /etc/sudoers.d の設定ファイルも直接書き換えるのではなく専用コマンドの <span class="decorationC" style="color:green;">sudo visudo -f /etc/sudoers.d/010_pi-nopasswd</span> を使うらしいです<br /><br />まぁただそれだけの話なんですけどね　モヤモヤしてた謎が解けたらイイネ！って感じで長々とお疲れさまでした！ <a href="https://room.dengeki.jp/tegalog.cgi?tag=%52%61%73%70%62%65%72%72%79%20%50%69" class="taglink" title="Raspberry Pi">#&#91;Raspberry Pi&#93;</a> <a href="https://room.dengeki.jp/tegalog.cgi?tag=%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89%e3%83%98%e3%83%ab%e3%83%97" class="taglink" title="コマンドヘルプ">#コマンドヘルプ</a><br /><small class="decorationS"><br />　　●<span class="decorationM" style="background-color:lightcyan;"><a href="https://room.dengeki.jp/tegalog.cgi?postid=6" class="postidlink">ラズパイの頻度低めだけど知っておきたい設定メモ Vol.3</a></span><br />　　●<span class="decorationM" style="background-color:lightpink;"><a href="https://room.dengeki.jp/tegalog.cgi?postid=5" class="postidlink">ラズパイの頻度低めだけど知っておきたい設定メモ Vol.2</a></span><br />　　●<span class="decorationM" style="background-color:lightcyan;"><a href="https://room.dengeki.jp/tegalog.cgi?postid=4" class="postidlink">ラズパイの頻度低めだけど知っておきたい設定メモ Vol.1</a></span><br />　　●<span class="decorationM" style="background-color:lightcyan;"><a href="https://room.dengeki.jp/tegalog.cgi?postid=3" class="postidlink">ラズパイで Apache2 サーバを建ててゆるい設定をする</a></span><br />　　●<span class="decorationM" style="background-color:lightcyan;"><a href="https://room.dengeki.jp/tegalog.cgi?postid=2" class="postidlink">モニタ無しでラズパイを VNC 接続できるとこまでセットアップ</a></span><br /></small> -- Posted by 猫山ぽるか 〔3977文字〕 No.5 ]]></description>
	<link>https://room.dengeki.jp/tegalog.cgi?postid=5</link>
	<guid>https://room.dengeki.jp/tegalog.cgi?postid=5</guid>
	<category>info</category>
	<pubDate>Mon, 18 Oct 2021 15:33:15 +0900</pubDate>
</item>
<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ ラズパイの頻度低めだけど知っておきたい設定メモ Vol.1 ]]></title>
	<description><![CDATA[ ラズパイの頻度低めだけど知っておきたい設定メモ Vol.1<br /><img class="embeddedimage " width="200" height="200" src="https://room.dengeki.jp/images/20211203174442-admin.jpg" alt="20211203174442-admin.jpg"><br />　<br />・有線 LAN 接続時の固定 IP な設定<br />・ホストネームの変更<br />・ファイルマネージャを root 権限で使う<br />・Raspberry Pi の基盤穴サイズ<br /><br />　　：<br /><br /><b class="decorationB">-----</b> <b class="decorationB">有線 LAN 接続時の固定 IP な設定</b> <b class="decorationB">-----</b><br /><br /><span class="decorationC" style="color:green;">/etc/dhcpcd.conf</span> を編集<br /><span class="decorationC" style="color:lightseagreen;">&#35; Example static IP configuration:<br />&#35;interface eth0<br />&#35;static ip_address=192.168.0.10/24<br />&#35;static ip6_address=fd51:42f8:caae:d92e::ff/64<br />&#35;static routers=192.168.0.1<br />&#35;static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1</span><br /><br />この部分で設定する　必要な行の先頭の &#35; (コメント記号)を消して有効にして必要な内容に書き換える<br />以下は設定例(IP アドレスが 192.168.0.80 でゲートウェイ(ホームルータ)アドレスが 192.168.0.100 で Google のパブリック DNS を使用の場合)<br /><br /><span class="decorationC" style="color:lightseagreen;">&#35; Example static IP configuration:</span><br />interface eth0<br />static ip_address=192.168.0.80/24<br /><span class="decorationC" style="color:lightseagreen;">&#35;static ip6_address=fd51:42f8:caae:d92e::ff/64</span><br />static routers=192.168.0.100<br />static domain_name_servers=8.8.8.8 8.8.4.4<br /><br />ファイル保存後に OS を再起動することにより有効になる<br /><br />　　：<br /><br /><b class="decorationB">-----</b> <b class="decorationB">ホストネームの変更</b> <b class="decorationB">-----</b><br /><br /><span class="decorationC" style="color:green;">/etc/hostname</span> を編集<br />標準状態で <span class="decorationC" style="color:red;">raspberrypi</span> が設定されているのでそれを適宜書き換える<br /><br /><span class="decorationC" style="color:green;">sudo nano /etc/hosts</span> で編集<br />最終行の <span class="decorationC" style="color:red;">127.0.1.1&nbsp;&nbsp;&nbsp;&nbsp;raspberrypi</span> の raspberrypi の部分を上記と同じものに書き換える<br /><br />ファイル保存後に OS を再起動することにより有効になる<br /><br />　　：<br /><br /><b class="decorationB">-----</b> <b class="decorationB">ファイルマネージャを root 権限で使う</b> <b class="decorationB">-----</b><br /><br />重要なファイル類の操作や編集を GUI でどうにかしたい時に便利かもしれないけど危険かも知れない（汗<br />ターミナル内で <span class="decorationC" style="color:green;">sudo pcmanfm</span> としてもいいんだけど…何かと面倒なんでアプリケーションランチャーに登録しておく<br /><br />DESKTOP ファイルとか云うものを作成する　※既にあるファイルマネージャのものをコピーして編集する<br /><span class="decorationC" style="color:green;">sudo cp /usr/share/applications/pcmanfm.desktop /usr/share/applications/pcmanfm_sudo.desktop</span><br /><br /><span class="decorationC" style="color:green;">sudo nano /usr/share/applications/pcmanfm_sudo.desktop</span><br /><span class="decorationC" style="color:red;">Icon=system-file-manager</span> を <span class="decorationC" style="color:red;">Icon=user-desktop</span> に変更する　※アイコンは何でもいいんだけど…個人的にこの辺が判りやすいアイコンだったんでこのようにした<br /><span class="decorationC" style="color:red;">Name=File Manager PCManFM</span> を <span class="decorationC" style="color:red;">Name=File Manager sudo</span> に変更する<br /><span class="decorationC" style="color:red;">Name&#91;ja&#93;=ファイルマネージャ PCManFM</span> を <span class="decorationC" style="color:red;">Name&#91;ja&#93;=ファイルマネージャ sudo</span> に変更する<br /><span class="decorationC" style="color:red;">GenericName&#91;ja&#93;=ファイルマネージャ</span> を <span class="decorationC" style="color:red;">GenericName&#91;ja&#93;=ファイルマネージャ sudo</span> に変更する<br /><span class="decorationC" style="color:red;">Exec=pcmanfm %U</span> を <span class="decorationC" style="color:red;">Exec=sudo pcmanfm %U</span> に変更してファイルを保存する<br /><br /><img class="embeddedimage " width="1056" height="786" src="https://room.dengeki.jp/images/202110161733492-admin.png" alt="202110161733492-admin.png"><br />デスクトップの「ランチャアイコン上」で<span class="decorationC" style="color:green;">右クリック</span>してメニューを出し<span class="decorationC" style="color:red;">アプリケーション・ランチャー Settings</span> をクリック<br /><br /><img class="embeddedimage " width="1056" height="786" src="https://room.dengeki.jp/images/202110161733491-admin.png" alt="202110161733491-admin.png"><br />何故か「システムツール」に入っている<span class="decorationC" style="color:red;">ファイルマネージャ sudo</span> を選び <span class="decorationC" style="color:red;">追加(A)</span> ボタンを押す<br /><br /><img class="embeddedimage " width="1056" height="786" src="https://room.dengeki.jp/images/20211016173349-admin.png" alt="20211016173349-admin.png"><br />新しい「ランチャアイコン」が追加された<br /><br /><img class="embeddedimage " width="1056" height="786" src="https://room.dengeki.jp/images/202110161747561-admin.png" alt="202110161747561-admin.png"><br />root 権限なんで(概ね)どのフォルダ/ファイルでも操作できる　その際にツールバーの左端に「現在あなたは管理者権限で操作しています」を表す <span class="decorationM" style="background-color:yellow;"><b class="decorationB">&#x26A0;</b></span> マークが表示されています<br />そしてもちろん右クリックでメニューを出して各種操作もできる<br /><br /><img class="embeddedimage " width="1056" height="786" src="https://room.dengeki.jp/images/20211016174756-admin.png" alt="20211016174756-admin.png"><br />メニュー操作により root 権限が必要なファイルの編集もできる<br />ただしシステムに関連した重要なファイルの変更などで取り返しのつかない事態に陥る危険性もあります　<span class="decorationC" style="color:red;">使用には細心の注意が必要です！</span><br /><br />　　：<br /><br /><b class="decorationB">-----</b> <b class="decorationB">Raspberry Pi の基盤穴サイズ</b> <b class="decorationB">-----</b><br /><br />Raspberry Pi の基盤穴サイズっていうか…適合するボルト径ですかね<br /><img class="embeddedimage " width="1067" height="800" src="https://room.dengeki.jp/images/20211016234940-admin.jpg" alt="20211016234940-admin.jpg"><br />M2.5 ってやつがピッタリ合うようです　M3 だと微妙に太くて通らないようです<br />設定って話じゃないけど…ちょっと気になったんでメモしておきます<br /><br />今回はここまで！　長々とお疲れさまでした！ <a href="https://room.dengeki.jp/tegalog.cgi?tag=%52%61%73%70%62%65%72%72%79%20%50%69" class="taglink" title="Raspberry Pi">#&#91;Raspberry Pi&#93;</a> <a href="https://room.dengeki.jp/tegalog.cgi?tag=%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89%e3%83%98%e3%83%ab%e3%83%97" class="taglink" title="コマンドヘルプ">#コマンドヘルプ</a><br /><small class="decorationS"><br />　　●<span class="decorationM" style="background-color:lightcyan;"><a href="https://room.dengeki.jp/tegalog.cgi?postid=6" class="postidlink">ラズパイの頻度低めだけど知っておきたい設定メモ Vol.3</a></span><br />　　●<span class="decorationM" style="background-color:lightcyan;"><a href="https://room.dengeki.jp/tegalog.cgi?postid=5" class="postidlink">ラズパイの頻度低めだけど知っておきたい設定メモ Vol.2</a></span><br />　　●<span class="decorationM" style="background-color:lightpink;"><a href="https://room.dengeki.jp/tegalog.cgi?postid=4" class="postidlink">ラズパイの頻度低めだけど知っておきたい設定メモ Vol.1</a></span><br />　　●<span class="decorationM" style="background-color:lightcyan;"><a href="https://room.dengeki.jp/tegalog.cgi?postid=3" class="postidlink">ラズパイで Apache2 サーバを建ててゆるい設定をする</a></span><br />　　●<span class="decorationM" style="background-color:lightcyan;"><a href="https://room.dengeki.jp/tegalog.cgi?postid=2" class="postidlink">モニタ無しでラズパイを VNC 接続できるとこまでセットアップ</a></span><br /></small> -- Posted by 猫山ぽるか 〔2516文字〕 No.4 ]]></description>
	<link>https://room.dengeki.jp/tegalog.cgi?postid=4</link>
	<guid>https://room.dengeki.jp/tegalog.cgi?postid=4</guid>
	<category>info</category>
	<pubDate>Sat, 16 Oct 2021 16:54:27 +0900</pubDate>
</item>
<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ Raspberry Pi 4 で素早く Apache2 サー… ]]></title>
	<description><![CDATA[ Raspberry Pi 4 で素早く Apache2 サーバを建ててゆるい設定をするメモ<br /><img class="embeddedimage " width="200" height="200" src="https://room.dengeki.jp/images/20211203173447-admin.png" alt="20211203173447-admin.png"><br />　<br />常時接続が当たり前の昨今に於いてお家で Raspberry Pi 4 を Web サーバにする需要が多いと聞きますが…わりと Apache2 の設定って難解で面倒なんですよね　その辺をぐぐってみてもバージョン違いや実装の違いでいまいち思ったように設定できないって困ったことはありませんか？　私はあります（汗って事なんで…セキュリティ的な云々は後回しにして手っ取り早く簡単に設定できる方法を模索してみます<br /><br />そんなラズパイへの Apache2 のインストール自体はコマンド一発で簡単にできます<br /><span class="decorationC" style="color:green;">sudo apt install apache2</span><br />これで Apache2 がインストールされサーバが動き出します<br />試しに PC などのブラウザのアドレス欄に <span class="decorationC" style="color:green;">ホスト名.local</span> と入れて確認してみましょう　ちなみに標準状態のラズパイのホスト名は raspberrypi なんで <span class="decorationC" style="color:green;">raspberrypi.local</span> になります<br /><br /><img class="embeddedimage " width="1011" height="677" src="https://room.dengeki.jp/images/20211016095920-admin.png" alt="20211016095920-admin.png"><br />我が家のラズパイはホスト名を <span class="decorationC" style="color:green;">pi4</span> にしてるんでアレだけど…概ねこんな感じになると思います<br />これは Apache2 のテスト用に用意されたページで <span class="decorationC" style="color:red;">/var/www/html</span> にある <span class="decorationC" style="color:red;">index.html</span> を表示しています　この <span class="decorationC" style="color:red;">/var/www/html</span> をドキュメントルートと呼びます　基本的にこのフォルダにホームページ用のデータを置いていきます<br /><br />　　：<br /><br />初期状態の Apache2 は各種機能が制限されているっていうか CGI が動かなかったりとか物足りない感じなんでその辺をどうにかします<br /><img class="embeddedimage " width="1186" height="749" src="https://room.dengeki.jp/images/20211016101700-admin.png" alt="20211016101700-admin.png"><br />そんな Apache2 の設定ファイルは <span class="decorationC" style="color:red;">/etc/apache2</span> にあります　この中の <span class="decorationC" style="color:red;">apache2.conf</span> を編集したくなる感じですが…世間的にはよっぽどの事がない限りこのファイルはイジらないほうがいいって事らしいんで別の手法で設定します<br /><br /><img class="embeddedimage " width="1186" height="749" src="https://room.dengeki.jp/images/20211016102522-admin.png" alt="20211016102522-admin.png"><br /><span class="decorationC" style="color:red;">/etc/apache2</span> を眺めてると… <span class="decorationC" style="color:red;">conf-available</span> と <span class="decorationC" style="color:red;">conf-enabled</span> の対になったフォルダに <span class="decorationC" style="color:red;">mods-available</span> と <span class="decorationC" style="color:red;">mods-enabled</span> の対と <span class="decorationC" style="color:red;">sites-available</span> と <span class="decorationC" style="color:red;">sites-enabled</span> の対になったフォルダがあるのに気づきます<br />これがラズパイの Apache2 の設定ファイル＆モジュール管理の基本となります　このフォルダ内にファイルを作ったりして設定を進めます<br /><br /><img class="embeddedimage " width="1186" height="749" src="https://room.dengeki.jp/images/20211016103332-admin.png" alt="20211016103332-admin.png"><br />そのそれぞれ対になった <span class="decorationC" style="color:red;">*-available</span> と <span class="decorationC" style="color:red;">*-enabled</span> 関係ですが… available は編集中のものを含め全ての候補となるファイルが入っています　対する enabled には Apache2 を起動する際に実際に読み込まれるファイルのシンボリック・リンクが入ります<br />※いろいろ設定した後の内容なんで…インストール直後のものとは違いがあります（汗<br /><br />それぞれ対になってる conf と mods と sites の意味ですが… conf にはアクセス制御系の設定が mods には拡張モジュールが sites にはバーチャルホスト系の設定が入ります<br />そしてその 有効/無効 にするための専用のコマンドが用意されています<br />conf の有効化には <span class="decorationC" style="color:green;">a2enconf</span> で無効化には <span class="decorationC" style="color:green;">a2disconf</span> を使います<br />mods の有効化には <span class="decorationC" style="color:green;">a2enmod</span> で無効化には <span class="decorationC" style="color:green;">a2dismod</span> を使います<br />sites の有効化には <span class="decorationC" style="color:green;">a2ensite</span> で無効化には <span class="decorationC" style="color:green;">a2dissite</span> を使います<br /><br />　　：<br /><br />では試しに CGI を有効化する設定をしてみましょう<br />CGI を使うにはそれ用のモジュールが必要らしいんで <span class="decorationC" style="color:green;">sudo a2enmod cgid</span> で有効化します<br />一応 <span class="decorationC" style="color:green;">sudo systemctl restart apache2</span> で Apache2 を再起動します<br /><br />これで <span class="decorationC" style="color:red;">/usr/lib/cgi-bin</span> に配置した CGI 的なプログラムが<a class="url labeledlink" href="https://room.dengeki.jp/cgi-bin/gd.cgi?hogehoge" rel="noopener noreferrer" target="_blank">動</a><a class="url labeledlink" href="https://room.dengeki.ne.jp/cgi-bin/gd.cgi?hogehoge" rel="noopener noreferrer" target="_blank">作</a><a class="url labeledlink" href="https://yqn.f5.si/cgi-bin/gd.cgi?hogehoge" rel="noopener noreferrer" target="_blank">可能</a>になりますが…どうせならドキュメントルートである <span class="decorationC" style="color:red;">/var/www/html</span> でも CGI を使えるようにしましょう<br /><br /><span class="decorationC" style="color:green;">sudo nano /etc/apache2/conf-available/cgi.conf</span> で新規ファイルとして編集して…<br /><span class="decorationC" style="color:red;">&lt;Directory &quot;/var/www/html&quot;&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;Options +ExecCGI<br />&nbsp;&nbsp;&nbsp;&nbsp;AddHandler cgi-script .cgi .pl .py .rb<br />&nbsp;&nbsp;&nbsp;&nbsp;AllowOverride All<br />&lt;/Directory&gt;</span><br />上記の 5 行を追加して保存します　今回は cgi.conf としましたが他の名前にしても大丈夫です<br /><br />保存したら <span class="decorationC" style="color:green;">sudo a2enconf cgi</span> でその設定ファイルを有効化します<br />最後に <span class="decorationC" style="color:green;">sudo systemctl restart apache2</span> で Apache2 を再起動します<br />これで <span class="decorationC" style="color:red;">/var/www/html</span> でも CGI が使用可能になりました<br /><br />　　：<br /><br />CGI の設定とは少し違いますが…上記の <span class="decorationC" style="color:green;">cgi.conf</span> に書き込んだ <span class="decorationC" style="color:green;">AllowOverride All</span> って設定があります　これは &nbsp;<span class="decorationC" style="color:green;">.htaccess</span> を使用可能にする設定です<br /><span class="decorationC" style="color:green;">.htaccess</span> が使えれば Apache2 の再起動をすることなく設定を即座に反映させることができるようになります　その分ページ表示されるまで余計な処理が増えて重くなるらしいんだけど…めったにアクセスの無い個人ページならまぁ問題にならないでしょう（滅<br /><span class="decorationC" style="color:green;">.htaccess</span> についての詳しい説明は…いろいろ多岐にわたる内容すぎて書ききれないんで省略します　気になる方は<a class="url labeledlink" href="https://www.google.com/search?q=.htaccess" rel="noopener noreferrer" target="_blank">ぐぐってみる</a>と良いでしょう（瀧汗<br /><br />　　：<br /><br />そうそう Perl で書かれた CGI で「CGI モジュールが必要」ってのをちょくちょく見かけるんで…そんな Perl のモジュールインストールメモをひとつ<br />Perl のモジュール管理(？)に CPAN (Comprehensive Perl Archive Network) を使うって話を度々目にすることがあったのも時既に過去の話だったのかなって遠い目をする話じゃなくて（汗そんな Perl モジュールの中で必須とする数個のインストールのためだけに CPAN を入れるのもめんどっちぃなぁって事なんで…普段使ってる <span class="decorationC" style="color:green;">sudo apt install</span> でその辺をどうにかするメモ<br /><br />結論から云うと CGI モジュールは <span class="decorationC" style="color:green;">sudo apt install libcgi-session-perl</span> で入ります　その他の有名どころのモジュールもだいたい <span class="decorationC" style="color:green;">sudo apt install</span> で入れることができます<br />上記のCGI モジュールは心もち特殊な例なんでアレだけど…他の多くは <span class="decorationC" style="color:green;">sudo apt install lib<span class="decorationC" style="color:red;">(モジュール名)</span>-perl</span> でイケる事が多いです<br /><br />例．GD モジュール→ <span class="decorationC" style="color:green;">sudo apt install lib<span class="decorationC" style="color:red;">gd</span>-perl</span> 　NKF モジュール→ <span class="decorationC" style="color:green;">sudo apt install lib<span class="decorationC" style="color:red;">nkf</span>-perl</span> などなど<br />確証はないけど…知っておくと損はないかもです<br /><br />そんなこんなな長々とお疲れさまでした！ <a href="https://room.dengeki.jp/tegalog.cgi?tag=%52%61%73%70%62%65%72%72%79%20%50%69" class="taglink" title="Raspberry Pi">#&#91;Raspberry Pi&#93;</a> <a href="https://room.dengeki.jp/tegalog.cgi?tag=%41%70%61%63%68%65" class="taglink" title="Apache">#Apache</a> <a href="https://room.dengeki.jp/tegalog.cgi?tag=%43%47%49" class="taglink" title="CGI">#CGI</a><br /><small class="decorationS"><br />　　●<span class="decorationM" style="background-color:lightcyan;"><a href="https://room.dengeki.jp/tegalog.cgi?postid=6" class="postidlink">ラズパイの頻度低めだけど知っておきたい設定メモ Vol.3</a></span><br />　　●<span class="decorationM" style="background-color:lightcyan;"><a href="https://room.dengeki.jp/tegalog.cgi?postid=5" class="postidlink">ラズパイの頻度低めだけど知っておきたい設定メモ Vol.2</a></span><br />　　●<span class="decorationM" style="background-color:lightcyan;"><a href="https://room.dengeki.jp/tegalog.cgi?postid=4" class="postidlink">ラズパイの頻度低めだけど知っておきたい設定メモ Vol.1</a></span><br />　　●<span class="decorationM" style="background-color:lightpink;"><a href="https://room.dengeki.jp/tegalog.cgi?postid=3" class="postidlink">ラズパイで Apache2 サーバを建ててゆるい設定をする</a></span><br />　　●<span class="decorationM" style="background-color:lightcyan;"><a href="https://room.dengeki.jp/tegalog.cgi?postid=2" class="postidlink">モニタ無しでラズパイを VNC 接続できるとこまでセットアップ</a></span><br /></small> -- Posted by 猫山ぽるか 〔3321文字〕 No.3 ]]></description>
	<link>https://room.dengeki.jp/tegalog.cgi?postid=3</link>
	<guid>https://room.dengeki.jp/tegalog.cgi?postid=3</guid>
	<category>info</category>
	<pubDate>Sat, 16 Oct 2021 09:49:15 +0900</pubDate>
</item>
<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ 完全モニタ無しで Raspberry Pi 4 を VNC … ]]></title>
	<description><![CDATA[ 完全モニタ無しで Raspberry Pi 4 を VNC 接続できるとこまでセットアップするメモ<br /><img class="embeddedimage " width="200" height="200" src="https://room.dengeki.jp/images/20211203170030-admin.png" alt="20211203170030-admin.png"><br />　<br />※ Raspberry Pi OS が新しくなったんで…それに対応した新しい解説はこちら→ <a href="https://room.dengeki.jp/tegalog.cgi?postid=26" class="postidlink">続・モニタ無しでラズパイを VNC 接続できるとこまでセットアップする</a><br /><br />　　：<br /><br />某風の噂で「ラズパイ4ってモニタが無いと動かないらしいんだぜ？」って聞いたんだけど…いやいやそんなバカな話があるもんかガセネタにも程がある！って思ったんでここはひとつラズパイ4に一切モニタを繋がないで(ついでにキーボードもマウスも繋がないで)セットアップして VNC 接続して操作できる辺りまでどうにかしてみました<br /><br />　　：<br /><br />今回使用したのは <a class="url labeledlink" href="https://www.raspberrypi.com/software/operating-systems/" rel="noopener noreferrer" target="_blank">Raspberry Pi OS with desktop</a> です<br /><img class="embeddedimage " width="1560" height="1016" src="https://room.dengeki.jp/images/20211015182803-admin.png" alt="20211015182803-admin.png"> <br />モニタ無しって事はサーバ運用だろ？　なんで GUI な環境がいるん？？　そう思うかも知れないけど…ド初心者は何かとグラフィカルな操作を求めがちなんだよ察しろ！<br /><br />ちなみにラズパイ起動用の microSD を作成するのには <a class="url labeledlink" href="https://www.raspberrypi.com/software/" rel="noopener noreferrer" target="_blank">Raspberry Pi Imager</a> を使うといいらしいんだけどなんか面倒くさかったんで Linux(Ubuntu) 付属の dd コマンドで済ませちゃいました（汗<br /><span class="decorationC" style="color:green;">sudo dd if=2021-05-07-raspios-buster-armhf.img of=/dev/sd<span class="decorationC" style="color:red;">X</span> bs=4M conv=fsync status=progress</span><br />of=/dev/sd<span class="decorationC" style="color:red;">X</span> の <span class="decorationC" style="color:red;">X</span> は個々の環境によって違います　あと conv=fsync は付けた方がいいらしいです<br /><br />　　：<br /><br />こうして出来た microSD を PC にマウントすると rootfs パーティションと boot パーティションが現れます　ただし rootfs パーティションは ext4 ファイルシステムなんで Windows では読めないらしいんで現れないかも知れません<br />もうひとつの boot パーティションは FAT32 ファイルシステムなんで Windows でも問題なく読み書きできます　そして起動前の操作はこの boot パーティションに対して行います<br /><br />まぁその操作は SSH を使えるようにするおまじないみたいなもんですかね<br />先ほどの <span class="decorationC" style="color:green;">boot パーティションのルートフォルダ</span>にファイル名が「<span class="decorationC" style="color:green;">ssh</span>」もしくは「<span class="decorationC" style="color:green;">ssh.txt</span>」のファイルを新規作成するか…もしくは何処かからコピーするだけです　「<span class="decorationC" style="color:green;">ssh</span>」もしくは「<span class="decorationC" style="color:green;">ssh.txt</span>」のファイルの中身は何でも構いません　空のファイルでもいいです<br /><br />これで前準備は完了です　この microSD を Raspberry Pi 4 に挿して電源を供給します<br />赤色のパワー LED が点灯して…その横にある緑色のアクセス LED が不規則に点いたり消えたりして起動していきます<br /><br />※起動の際に何かエラーがあるとこの緑色のアクセス LED が規則的に点滅して知らせてくれます<br />※点滅の回数などで何のエラーなのかある程度知ることが出来ます<br />※<a class="url labeledlink" href="https://support-pishop-ca.translate.goog/article/33-raspberry-pi-act-led-error-patterns?_x_tr_sl=en&_x_tr_tl=ja&_x_tr_hl=ja&_x_tr_pto=nui,sc" rel="noopener noreferrer" target="_blank">こちらのページ</a> に詳しく書かれているんでもしもの時には参考になるかも？？<br /><br />起動が完了すると緑色のアクセス LED が殆ど点灯しなくなります　その辺が起動の見極め時ですかね<br />そして PC から SSH 接続します　Ubuntu(Linux) には標準で ssh が用意されているけど… Windows はどうなんだろう？　そっちにも用意されているとは聞いたことがあるようなないような（汗<br /><br /><span class="decorationC" style="color:green;">ssh pi@raspberrypi.local</span><br />LAN 内にラズパイが 1 台だけなら基本的にこの手法で繋がります<br />なおラズパイのネットワークへの接続は有線 LAN を使います<br />無線 LAN(WiFi) を使いたい場合は「wpa_supplicant.conf」でどうにかするらしいのですが…今回は有線 LAN のみを使ったんで詳細は不明です<br /><br />余談ですが…我が家には既にラズパイ3が動いているんで上記の <span class="decorationC" style="color:green;">raspberrypi.local</span> が使えませんでした<br />それなら IP アドレスで…と思うのですが DHCP による割り当てなんでアドレスが判りません（汗<br />まぁそんな時は <span class="decorationC" style="color:green;">arp -a</span> とかすると活きた IP アドレスが列挙されるんでアタリを付けやすくなりますが<br /><br />そうこう云いつつ SSH 接続を開始します<br />今回は ssh の -l オプションでユーザ pi を指定してるけど Windows の ssh はオプションの意味が違うらしい？<br />ここは <span class="decorationC" style="color:green;">ssh pi@192.168.0.34</span> とかの書き方のほうが判りやすくていいかもだけどどうなんだろう<br /><img class="embeddedimage " width="736" height="479" src="https://room.dengeki.jp/images/202110151828031-admin.png" alt="202110151828031-admin.png"> <br />初接続時のみ「未知の証明書なんだけど大丈夫？　接続していいの？？」って聞かれるんで <span class="decorationC" style="color:green;">yes</span> する<br /><br /><img class="embeddedimage " width="736" height="479" src="https://room.dengeki.jp/images/202110151828032-admin.png" alt="202110151828032-admin.png"> <br />パスワードを聞かれます　ラズパイの初期設定パスワードは <span class="decorationC" style="color:red;">raspberry</span> なんでそれを入力する<br /><br /><img class="embeddedimage " width="736" height="479" src="https://room.dengeki.jp/images/202110151828033-admin.png" alt="202110151828033-admin.png"> <br />接続できたら次の作業っていうか <span class="decorationC" style="color:green;">sudo raspi-config</span> して設定ツールを起動する<br />キーボードの矢印キーで移動してエンターキーで決定ってスタイルです<br />Tab キーを使う場面もあります<br /><br /><img class="embeddedimage " width="736" height="479" src="https://room.dengeki.jp/images/202110151828034-admin.png" alt="202110151828034-admin.png"> <br /><span class="decorationC" style="color:red;">3 Interface Options</span> を選ぶ<br /><br /><img class="embeddedimage " width="736" height="479" src="https://room.dengeki.jp/images/202110151828035-admin.png" alt="202110151828035-admin.png"> <br /><span class="decorationC" style="color:red;">P3 VNC</span> を選ぶ<br /><br /><img class="embeddedimage " width="736" height="479" src="https://room.dengeki.jp/images/202110151828036-admin.png" alt="202110151828036-admin.png"> <br />VNC サーバを有効にするけどいいの？と聞かれるんで <span class="decorationC" style="color:red;">&lt;Yes&gt;</span> を選ぶ<br /><br /><img class="embeddedimage " width="736" height="479" src="https://room.dengeki.jp/images/202110151828037-admin.png" alt="202110151828037-admin.png"> <br />設定完了<br />それじゃ早速 PC の VNC Viewer で接続してみましょう　我が家では <a class="url labeledlink" href="https://remmina.org/" rel="noopener noreferrer" target="_blank">Remmina</a> を使ってみました<br /><br /><img class="embeddedimage " width="640" height="480" src="https://room.dengeki.jp/images/202110151828038-admin.png" alt="202110151828038-admin.png"> <br />・・が繋がりません　なんか「Unknown authentication scheme from VNC server: 13, 5, 6, 130, 192」ってエラーっぽい？<br />これはラズパイ側のセキュリティ設定との兼ね合いらしいんでその辺をどうにかします<br /><br /><img class="embeddedimage " width="736" height="479" src="https://room.dengeki.jp/images/202110151828039-admin.png" alt="202110151828039-admin.png"> <br />先ほどの SSH でラズパイの設定ファイルを編集します<br /><span class="decorationC" style="color:green;">sudo nano /root/.vnc/config.d/vncserver-x11</span><br /><br />テキストエディタに nano を使ったけど vi も使えます　お好きな方でどうぞ<br />そして末尾に以下の 3 行を追加します<br /><br /><img class="embeddedimage " width="736" height="479" src="https://room.dengeki.jp/images/2021101518280310-admin.png" alt="2021101518280310-admin.png"> <br /><span class="decorationC" style="color:red;">Authentication=VncAuth<br />Encryption=AlwaysOff<br />Password=</span><br /><br /><img class="embeddedimage " width="736" height="479" src="https://room.dengeki.jp/images/2021101518280311-admin.png" alt="2021101518280311-admin.png"> <br /><span class="decorationC" style="color:green;">sudo systemctl restart vncserver-x11-serviced</span> で VNC サーバを再起動する<br /><br /><img class="embeddedimage " width="640" height="480" src="https://room.dengeki.jp/images/2021101518280312-admin.png" alt="2021101518280312-admin.png"> <br />再び PC の VNC Viewer で接続を試みる<br />パスワードを聞いてくるようになりました　でもなんかエラーが出て繋がりません<br /><br /><img class="embeddedimage " width="736" height="479" src="https://room.dengeki.jp/images/2021101518280313-admin.png" alt="2021101518280313-admin.png"> <br />再び SSH で <span class="decorationC" style="color:green;">sudo vncpasswd -service</span> と入力する<br /><br /><img class="embeddedimage " width="736" height="479" src="https://room.dengeki.jp/images/2021101518280314-admin.png" alt="2021101518280314-admin.png"> <br />パスワードを聞かれるのでお好みのパスワードを 2 回入力する<br />そして <span class="decorationC" style="color:green;">sudo systemctl restart vncserver-x11-serviced</span> で VNC サーバを再起動する<br /><br /><img class="embeddedimage " width="640" height="480" src="https://room.dengeki.jp/images/2021101518280315-admin.png" alt="2021101518280315-admin.png"> <br />またまた PC の VNC Viewer で接続を試みる　先ほど設定したパスワードを入力する<br />しかしまだ繋がらない（汗<br /><br />これはラズパイ側のモニタ設定(？)が問題らしいのでその辺を解決する<br /><br /><img class="embeddedimage " width="736" height="479" src="https://room.dengeki.jp/images/2021101518280316-admin.png" alt="2021101518280316-admin.png"> <br /><span class="decorationC" style="color:green;">sudo nano /boot/config.txt</span> を編集する<br /><br /><img class="embeddedimage " width="736" height="479" src="https://room.dengeki.jp/images/2021101518280317-admin.png" alt="2021101518280317-admin.png"> <br /><span class="decorationC" style="color:lightseagreen;">&#35;hdmi_force_hotplug=1</span> を探す<br /><br /><img class="embeddedimage " width="736" height="479" src="https://room.dengeki.jp/images/2021101518280318-admin.png" alt="2021101518280318-admin.png"> <br />あった<br /><br /><img class="embeddedimage " width="736" height="479" src="https://room.dengeki.jp/images/2021101518280319-admin.png" alt="2021101518280319-admin.png"> <br />先頭の &#35; (コメント記号)を消して有効にする<br /><br /><img class="embeddedimage " width="736" height="479" src="https://room.dengeki.jp/images/2021101518280320-admin.png" alt="2021101518280320-admin.png"> <br />これで設定は完了なんでラズパイを再起動する<br /><span class="decorationC" style="color:green;">sudo reboot</span><br /><br /><img class="embeddedimage " width="1056" height="800" src="https://room.dengeki.jp/images/2021101518280321-admin.png" alt="2021101518280321-admin.png"> <br />これで VNC Viewer での操作が可能になりました<br />なんかデフォルトのパスワードだと云々…のダイアログが出てるけどまぁ OK する<br /><br /><img class="embeddedimage " width="1056" height="800" src="https://room.dengeki.jp/images/2021101518280322-admin.png" alt="2021101518280322-admin.png"> <br />せっかくなんで初期設定も済ませちゃおっか<br /><br /><img class="embeddedimage " width="1056" height="800" src="https://room.dengeki.jp/images/2021101518280323-admin.png" alt="2021101518280323-admin.png"> <br />お国の設定は Japan にすると概ね日本語になるよ<br /><br /><img class="embeddedimage " width="1056" height="800" src="https://room.dengeki.jp/images/2021101518280324-admin.png" alt="2021101518280324-admin.png"> <br />ログインパスワードの再設定をする　ラズパイ初期設定パスワード <span class="decorationC" style="color:red;">raspberry</span> のままだと何かと不安なんでお好みのものに変更しておく<br /><br /><img class="embeddedimage " width="1056" height="800" src="https://room.dengeki.jp/images/2021101518280325-admin.png" alt="2021101518280325-admin.png"> <br />ラズパイにモニタを繋げている人向けの設定<br />黒枠があったりして見づらい時にはチェックを入れておくとどうにかしてくれるらしい？<br /><br /><img class="embeddedimage " width="1056" height="800" src="https://room.dengeki.jp/images/2021101518280326-admin.png" alt="2021101518280326-admin.png"> <br />WiFi の設定は使わなかったんで素通りした（汗<br /><br /><img class="embeddedimage " width="1056" height="800" src="https://room.dengeki.jp/images/2021101518280327-admin.png" alt="2021101518280327-admin.png"><br />最後にソフトウエア等のアップデート　全自動でやってくれるから見てるだけなんだけど結構時間がかかります<br /><br />　　：<br /><br />そんな感じで作業完了してモニタ無しのラズパイを VNC Viewer で操作できるようになりました<br />そして某風の噂の「ラズパイ4ってモニタが無いと動かないらしいんだぜ？」って話は正しくないと判明しました<br />まぁ実際に長期の運用をしてみないとアレかもだけど…感触的には大丈夫っぽそうかな<br /><br />そんなこんなな長々とお疲れさまでした！ <a href="https://room.dengeki.jp/tegalog.cgi?tag=%52%61%73%70%62%65%72%72%79%20%50%69" class="taglink" title="Raspberry Pi">#&#91;Raspberry Pi&#93;</a><br /><small class="decorationS"><br />　　●<span class="decorationM" style="background-color:lightcyan;"><a href="https://room.dengeki.jp/tegalog.cgi?postid=6" class="postidlink">ラズパイの頻度低めだけど知っておきたい設定メモ Vol.3</a></span><br />　　●<span class="decorationM" style="background-color:lightcyan;"><a href="https://room.dengeki.jp/tegalog.cgi?postid=5" class="postidlink">ラズパイの頻度低めだけど知っておきたい設定メモ Vol.2</a></span><br />　　●<span class="decorationM" style="background-color:lightcyan;"><a href="https://room.dengeki.jp/tegalog.cgi?postid=4" class="postidlink">ラズパイの頻度低めだけど知っておきたい設定メモ Vol.1</a></span><br />　　●<span class="decorationM" style="background-color:lightcyan;"><a href="https://room.dengeki.jp/tegalog.cgi?postid=3" class="postidlink">ラズパイで Apache2 サーバを建ててゆるい設定をする</a></span><br />　　●<span class="decorationM" style="background-color:lightpink;"><a href="https://room.dengeki.jp/tegalog.cgi?postid=2" class="postidlink">モニタ無しでラズパイを VNC 接続できるとこまでセットアップ</a></span><br /></small> -- Posted by 猫山ぽるか 〔3954文字〕 No.2 ]]></description>
	<link>https://room.dengeki.jp/tegalog.cgi?postid=2</link>
	<guid>https://room.dengeki.jp/tegalog.cgi?postid=2</guid>
	<category>info</category>
	<pubDate>Fri, 15 Oct 2021 18:28:03 +0900</pubDate>
</item>

	<!-- END ENTRIES -->
</channel>
</rss>

