でんげき☆ Network Service

Raspberry Pi 4 で運用実験中 Connect checker

タグ「コマンドヘルプ」を含む投稿6件]

Android と PC のための adb メモ

20220321135913-admin.png
 
Android Debug Bridge(adb)なるものがあります Debug Bridge なんて聞くと「なんか面倒くさそうだな…」って思いがちだけど…一般利用者的な使い方でも「知っておくと得をする」ような便利な機能があるっていうか忘れがちな使い方をまとめて忘れ物防止メモって感じで書き留めておきます

  :

一般的には Android 端末と PC を USB ケーブルで繋ぎます なんかここんとこ Wi-Fi を使ってケーブル無しで繋ぐ手法が確立されてきてるようだけど…その話は後述って感じで

2022032113591336-admin.png 2022032113591335-admin.png
まずはスマホ側の設定ってことで「設定」メニューから「システム」→「端末情報」と進みます ※機種により若干の操作法の違い有り

2022032113591334-admin.png
その中にある「ビルド番号」を連打する

2022032113591333-admin.png
既に有効にしてあったんでアレだけど…これで「開発者向けオプション」を有効にできます

※機種によっては「設定」メニューからいきなり「デバイス情報」って入る場合や「詳細設定」の中に入っている場合とかがあるようです まぁその辺はそれっぽい項目を選びつつ「ビルド番号」を探し出してそれを連打してください(汗

2022032113591332-admin.png 2022032113591331-admin.png
次に「設定」メニューから「システム」→「詳細設定」と進むと「開発者向けオプション」が現れます ※これも機種によって進むべきメニュー項目が違う場合があるんで…あちこち探して辿り着いてください(汗

2022032113591330-admin.png 2022032113591329-admin.png
「開発者向けオプション」内にある「USBデバッグ」をオンにして許可する これで端末側の設定は概ね完了です

  :

お次は PC 側の設定ってことで…本来 adb ってやつは Android Studio って開発ツールに含まれているものなんでそれをセットアップする必要があるんだけど単に adb だけを使いたい人向けにシンプルなパッケージが用意されているんでそれを入れることにします

2022032113591328-admin.png
sudo apt install adb

なお動作検証っていうか…基本的に xubuntu 20.04 LTS を USB メモリに書き込んだものをお試しモードっていうかライブ起動して諸々を試しています 画像の撮り忘れなんかで…本番環境の Ubuntu MATE 20.04 LTS を使う場合もありますがその辺はご了笑ください汗

2022032113591327-admin.png
インストールが完了したら先ほどの「USBデバッグ」をオンにした Android と PC を USB ケーブルで繋ぎ adb start-server してみましょう daemon started successfully と出れば成功です
この操作は省略してもいいのですが…接続した Android 機と PC とのやりとりを管理するデーモン(adbd)の起動を明確に確認できるので知っておいていいと思います
ちなみにデーモン(adbd)を終了する際には adb kill-server します いろいろな端末を繋ぎつつ作業してると稀に動作が不安定になる場合とかあるようなので…いったんデーモンを終了させて再び起動させるとうまくいく時があります

2022032113591326-admin.png
そんな adb ですが 1 台の PC に複数台の Android を接続することができます 接続した Android(のシリアル) は adb devices で確認することができます

2022032113591325-admin.png
そのシリアルを adb の -s オプションを使って指定するとその Android 機を操作できます 画像はそれぞれの Android 内の proc フォルダ内にある cpuinfo ファイルの末尾 10 行くらいを表示させた一例です
なお PC に 1 台だけ Android 機を接続して使用する際にはこの -s オプションは不要です 今後は説明の簡略化っていうか 1 台だけの接続にして -s オプションは省略した感じでいきます

  :

それでは adb のよく使うコマンドの説明をちょびっとだけ…

2022032113591324-admin.png
adb shell で接続した Android 機にログイン(?)できます コマンドライン上の操作で Linux 系のコマンドが使えます

2022032113591323-admin.png
adb shell コマンド名 だと PC 側の端末上で接続した Android 機のコマンドを実行できます 実行結果を PC 側のファイルにリダイレクトしたりパイプに送り込んだりできます
ちなみにここで試している pm コマンドはパッケージ・マネージャ系のコマンドですね これに list package なる引数を与えて起動するとその端末にインストールされているアプリの一覧を確認できます ここではその結果から grep を用いて必要な行だけ抽出して表示させています

2022032113591322-admin.png 2022032113591321-admin.png
パッケージの一覧を確認できたってことで…それじゃ Android 機からファイルを取ってくる adb pull を使って apk(アプリ) を抜いてみましょう
目的とするアプリの ID(?) を指定することで apk ファイルを取得できます これはブラウザを使い Google Play で目的のアプリを表示させたアドレス欄にも表示されているんでその辺を参考にして grep で絞り込むといいでしょう
そうして出てきた中から /data/app/〜/base.apk を選択してコピーして adb pull /data/app/〜/base.apk として実行すると PC 側に base.apk として持ってこれます

この apk ファイルはそのまま Android 機にインストールすることができます インストールする場合は目的の Android 機に繋ぎ替えた後に adb install base.apk とすれば ok です

2022032113591320-admin.png 2022032113591319-admin.png
モノは試しに Fire HD 10 タブレット (10インチHDディスプレイ) 32GB - Alexa搭載 にインストールしてみました もともと Amazon apps 版の フェアリードール が入ってたんだけど…それとは別にインストールすることができました
Amazon Fire には Google Play が入ってないんだけどこの手法を使えばアプリのインストールが可能です…が多くの場合ハードやセキュリティの制約などで入れられないことが多いです まぁどうしてもの非常時に入ったらイイナ!って感じで覚えておくといいかもです(汗

  :

アプリのバックアップの別の手法として adb backup アプリID ってのもあるようですね ただこれは機種ごとのセキュリティ設定が強く影響するのか…同じアプリでも G 社の Android だとうまくいくけど S 社のそれだとうまくいかないなんてことがあるようです
まぁもしうまくバックアップすることができたとして…出来上がった *.ab ファイルを展開するツールが存在するっぽい?
android-backup-extractor ってものらしく abe.jar ってのがそれらしいです Java 環境が必要で java -jar abe.jar unpack 解凍元.ab 解凍先.tar で展開できるようです

  :

Android 機のスクリーンショットを PC で撮ってそのファイルを PC に保存するなんてこともできるようです

2022032113591311-admin.png
例えば adb exec-out screencap -p > ss$(date +%Y%m%d%H%M%S).png なんてすると実行した日時を付加した ss が PNG で PC に直接保存できます スマホの「電源 + 音量ダウン」のボタン同時押しがそれなりに使いにくいんで…微妙なタイミングを要するスクリーンショットを撮りたい時などに重宝すると思います

  :

Android 機の画面を PC 上で表示させられる scrcpy ってのがあるらしいです これは sudo apt install scrcpy で入れることができるようだけど…

2022032113591318-admin.png
我が家の環境ではエラーが出て動きませんでした

2022032113591317-admin.png
それじゃ別の手法で!ってことで snap 版の scrcpy を sudo snap install scrcpy で入れてみました ちなみに apt で入れる scrcpy の方が PATH の優先順位が高いんで /snap/bin/scrcpy って感じのフルパス指定で起動してみます

2022032113591316-admin.png
snap 版の scrcpy だとうまく動きました! 思ってたより動きもスムーズでいい感じです!(>_<)w
そんな snap 版の scrcpy を毎回毎回フルパス指定で起動するのも面倒だな…って事なんで snap の別名設定を使ってみることにします

2022032113591315-admin.png
設定は sudo snap alias 元のコマンド名 新しいコマンド名 でできるようなんで sudo snap alias scrcpy Scrcpy って感じで頭文字を大文字にしてみました エイリアスを確認する際には snap aliases とするようです

  :

同様に Android 機の音声を PC 上で再生させられる sndcpy ってのがあるらしいです これは rom1v / sndcpy の Get the app から sndcpy-v1.1.zip (※20220321現在) を落としてきて展開して…その中の sndcpy (シェルスクリプト) を実行すればいいようです

2022032113591314-admin.png
先ほどの Scrcpy と sndcpy を同時に使ってみた例 音声は 0.5 秒くらい(?)遅れてきてるみたいですね あーあと sndcpy を使用する場合には PC に vlc (メディアプレイヤ) を入れておく必要があるようです
スマホとかの小さい画面とショボいスピーカーの音声を PC 側に出すと見やすくて音もよくてとてもゴキゲンです! 追加投資は USB ケーブルだけ!って手軽さがいいですね!

  :

そんな USB ケーブルで PC と Android 機を繋ぎっぱなしってのもなんか邪魔くさいんで…その辺をネットワーク (Wi-Fi等) でどうにかする手法があるようです ※使用するにあたり…最初の設定段階では USB ケーブルで繋いでおく必要があります

2022032113591313-admin.png 2022032113591312-admin.png
まず adb tcpip 5555 で listen するポートを 5555 に設定します ポート番号は 5555~5585 の範囲で奇数番号のポートが使用できるらしい?
次に adb connect 192.16x.x.x32 で Android 機の IP アドレスを指定して接続します Android 機の IP アドレスは「設定」→「ネットワークとインターネット」→「Wi-Fi」→「接続済みのAP」→「詳細設定」等で確認できます ※使用機種によりメニュー構成が若干違います

connected to 192.16x.x.x32:5555 などと表示され接続したら…この時点で USB ケーブルを抜いても ok です
あとは adb shell なりの adb コマンドをネットワーク経由で使用できます

  :

さらに最近では最初からネットワークで全てが完了する「ワイヤレス デバッグ」も使用できるようになりつつあります ※ Android OS 11 以降で adb も新しいものが必要になります

202203211359136-admin.png
sudo apt install adb で入れたものは Ver. 1.0.39 で…これは古いので使えません じゃぁどうしよう?ってことで…それじゃ Android Studio を入れてみましょう

202203211359135-admin.png 202203211359134-admin.png
Android Studio のダウンロードページ のダウンロードボタンを押下して…お決まりの了解したぜ!チェックした後にダウンロードします ダウンロードしたファイルを解凍して android-studio/bin/studio.sh を実行するとインストールが開始します 本気で使う気がないのなら…まぁこの辺は適当でいいと思います(汗

202203211359136-admin.png
標準的なインストールを行うと ~/Android/Sdk/platform-tools/ の中に adb が用意されるのでこれを使ってみます Ver. 1.0.41 でした

2022032113591310-admin.png
お次は Android OS 11 以降の設定を行います 「設定」→「システム」→「開発者向けオプション」→「ワイヤレス デバッグ」をオンにして…その項目をタップする

202203211359139-admin.png
タップしたらワイヤレス デバッグの設定に入れるので…「ペア設定コードによるデバイスのペア設定」をタップする

202203211359138-admin.png
すると必要な情報が表示されるので…これをもとに adb で接続設定していきます なお古い adb と混同するをアレなんで ~/Android/Sdk/platform-tools/adb って感じのフルパスでコマンドを起動しています

202203211359133-admin.png
先ほど表示されてた IP アドレスとポート番号で ~/Android/Sdk/platform-tools/adb pair 192.16x.x.x31:43015 って感じで実行します するとペアリング・コードを聞かれるのでそれを入力します ※ここでは 226441 でした これでペアリング設定は完了です

202203211359132-admin.png 202203211359137-admin.png
お次は実際に接続します これは ~/Android/Sdk/platform-tools/adb connect 192.16x.x.x31:40643 って感じで実行します 先ほどのペアリング設定のポート番号とは別のポート番号になるので注意してください

202203211359131-admin.png
成功すればこれでワイヤレス接続が完了しています 後は ~/Android/Sdk/platform-tools/adb shell するなり色々をネットワーク経由で行えます 少々手順が多くて面倒かなーって思いつつ…まぁ慣れてしまえば USB ケーブルを接続するより楽ちんかなーってイメージです
ただし先述の scrcpy や sndcpy は(20220321現在)対応していない感じでした この辺が早く対応してくれればなーって思います

※ 追記 ※
テストした環境の PATH 設定の都合で Ver. 1.0.39 の adb が参照されていたので…その辺をどうにかしたら sndcpy は動きました Android Studio で入れた Ver. 1.0.41 を優先的に使えるよう PATH を以下のように設定しました
export PATH="/home/$USER/Android/Sdk/platform-tools:$PATH" ※ 標準的(?)な Android Studio のインストールを行った場合
一時的な設定ならコマンドラインで上記のように実行するもよし…再起動後とかも永続的に使いたいのであれば ~/.profile を編集して…最終行辺りに上記のパス設定を追加しておくといいでしょう

ちなみに scrcpy は apt 版(Ver. 1.12.1)と snap 版(Ver. 1.23)のどちらもワイヤレス環境では動作しませんでした(-_-;)

  :

そんなこんなな adb の使い方いろいろでした 他にも音量の操作やら特定のイベントシグナルの送信などなどアプリ開発のデバッグに有用な機能が用意されているのですが…まぁ末端ユーザでは概ね必要のない機能なのでその辺はもっとプロの方が発する情報をご参照くださいってことで #Android #Ubuntu #コマンドヘルプ

情報 <6454文字>

スケジュール実行 cron は 13 日の金曜日の夢を見るか?

20211211080738-admin.png
 
「〇〇〇〇は△△△△の夢を見るか?」ってフレーズを見かけるとなんかえっちな気分になっちゃう!って光栄マイコンシステムのストロベリーなんとか世代のひいおじいちゃんが云ってたけど…自称:ゆとりのない平成のゆとり的なオレ様的にはしょーみなンてるんか全く意味わかんないですw まじまじwww
まぁそんな茶番はおいといて…諸々の bot 大好きな人々に愛されるスケジュール実行の cron についての諸々です

cron - daemon to execute scheduled commands (Vixie Cron)
スケジュールされたコマンドを実行するデーモンって事らしいですね(機械翻訳

このスケジュールの確認・設定をするには crontab なるコマンドを使います
スケジュールの確認 crontab -l
スケジュールの設定 crontab -e

設定の初回起動時のみ使用するエディタを聞かれるらしい? なおこの使用するエディタは以下のコマンドで再設定できるようです
select-editor

Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/vim.tiny

Choose 1-3 [2]:

なんか「<---- easiest」と「[2]」ってのが現在設定されているエディタっぽく見えるけどそうじゃなくて…何も入力せずに Enter した時に選択されるデフォルト値を表示しているようです 紛らわしいですね(-_-;)

  :

では実際に crontab -e して設定してみましょう
新たなスケジュールを設定する場合は…新しい行として以下の書式を追加します

* * * * * コマンド

5 個並んだ「*」は順番に… 分 時 日 月 曜日 を指しています
「*」は設定可能な全ての値になってるんで…上記の「* * * * * コマンド」は 全ての分全ての時全ての日全ての月全ての曜日 って意味となり「毎分(だいたい 0 秒くらい)にコマンドを実行」となります
もうちょっと細かく設定した例っていうか…

1 * * * * コマンド
毎月の毎日の毎時の 1 分にコマンドを実行

1 2 * * * コマンド
毎月の毎日の 2 時 1 分にコマンドを実行

1 2 3 * * コマンド
毎月の 3 日の 2 時 1 分にコマンドを実行

1 2 3 4 * コマンド
4 月 3 日の 2 時 1 分にコマンドを実行

曜日は少々特殊な扱いになってるってるんでアレだけど…例えば
* * * * 6 コマンド もしくは
* * * * sat コマンド で毎月の毎土曜日の毎時の毎分にコマンドを実行します
数字と曜日は 0=sun, 1=mon, 2=tue, 3=wed, 4=thu, 5=fri, 6=sat, 7=sun に対応しています 大文字小文字は関係ないようです

  :

もっと細やかな設定をしてみましょう 例えば勤務時間内にありがちな設定っていうか 8 時から 17 時までの毎時 0 分にコマンドを実行するって例だと…
0 8,9,10,11,12,13,14,15,16,17 * * * コマンド
0 8-17 * * * コマンド
設定したい内容を「,(カンマ)」で区切って列挙するとか「-(ハイフン)」で 8 から 17 までって感じで指定します
0 8-12,13-17 * * * コマンド
こんな感じで範囲指定を列挙することもできるようです

ただし分なり時なりの境い目をまたいで設定する場合には注意が必要です 例えば毎時の 50 分から次の 10 分までって場合だと…
50-10 * * * * コマンド
この指定では動きません この場合だと…
50-59,0-10 * * * * コマンド
こんな感じで途中に「,(カンマ)」を入れて区切ってやらないとダメなようです ちなみに「,(カンマ)」で列挙する場合には数の大小の順番は関係ないらしいです

  :

さらに細やかな設定をしてみましょう 例えば(どのような状況でそのような必要があるのかイマイチ思い浮かばないけど)偶数日(2 で割り切れる日)の 10 時 20 分のみコマンドを実行するって例だと…
20 10 2,4,6,8,10,12,14,16,18,20,22,24,26,28,30 * * コマンド
20 10 2-30/2 * * コマンド
こんな感じで指定できます まぁ「全ての偶数日」って事なんで「2-30/2」なんて指定じゃなく「*/2」でもイケるようです
ちなみに「全ての奇数日」ってしたいのあれば「1-31/2」って感じになるみたいです
  :

月初にコマンドを実行したい時っていうか月初は 1 日に決まってるんでその辺は簡単だってことで…じゃぁ月末にコマンドを実行したい時はどうしたらいいんでしょうか
カレンダーをざっと眺めて 12 ヶ月分の設定を用意しとけば…って「あーでも 2 月の月末は 28 日だけじゃなくてうるう年とかどうしよう!!」ってなるんでもうちょっと手の込んだ設定でどうにかしてみましょう
この場合っていうか cron の設定だけでは毎月の月末を判定することはできません なのでコマンド側でその辺をどうにか対処してみます

* * 28-31 * * /usr/bin/test $(/bin/date -d '+1 day' +%d) -eq 1 && コマンド
いきなりややこしい感じになって申し訳ないかんじで(汗
これは月末としてなり得る 28 日 から 31 日にかけて /bin/date に「翌日」を出力させた後に /usr/bin/test でそれが「月初」を意味する「1」であるかを判定して「1」であれば && でくっつけたコマンドを実行するって意味になります

cron 内での使用に限った話じゃないけど…この && でコマンドを並べると「直前のコマンドが正常終了した場合に次のコマンドを実行」って動作をします 例えば Web サイトの証明書の更新コマンドを実行して…それが成功して更新コマンドが正常終了した時のみ Web サーバを再起動するなんて処理を 1 行にまとめて書けるんで便利だと思います

  :

そんな感じの複雑な判定を求められるスケジュール設定っていうか…少し特別動作をする「曜日」の設定についての注意事項を少々
例えば「13 日の金曜日の 0 時 0 分にコマンドを実行」なんてありがちなスケジュール設定をしたいと思いました
0 0 13 * fri コマンド
これでバッチリだぜ!!(>_<)wって思いたい所ですが…これでは思った動作をしません
これだと「毎月の 13 日」と「毎月の金曜日」の両方でコマンドが実行されてしまします

何となくこれまで見てきた cron の動作的に「設定した項目の全てに合致した AND 的な動作」を期待しがちなんだけど…「日の設定」と「曜日の設定」に関しては「どちらか一方でも合致したら動く OR 的な動作」になってしまうようです ※ただし「*」での設定は除く

0 0 13 * * /usr/bin/test $(/bin/date +\%w) -eq 5 && コマンド
0 0 * * fri /usr/bin/test $(/bin/date +\%d) -eq 13 && コマンド
そんな 13 日の金曜日を判定するには上記のように設定します
※ 0=sun, 1=mon, 2=tue, 3=wed, 4=thu, 5=fri, 6=sat, 7=sun

前者は毎月の 13 日/bin/date を使って曜日を出力させてそれが金曜日かどうかを判定する手法
後者は毎月の金曜日/bin/date を使って日付を出力させてそれが 13 日かどうかを判定する手法です
後者の手法は「毎月の金曜日」って感じで月に 4〜5 回ほど動作することになって無駄が多いんで…この場合は前者の「毎月の 13 日」って設定の方が好ましいと思います

  :

あと cron の設定でミスりやすい点と云うかコマンドや入出力に使用するファイルへのパスですかね
コマンドというかスクリプトを作ってる時にありがちなんだけど…どこかのフォルダをカレントディレクトリに設定してスクリプトをテストしていて「できた!さぁ cron に設定しよう!」ってしたら思った動作をしない時があるんですよね
これは cron が実行するカレントディレクトリが往々にしてテストしていたフォルダと違う事により指定したファイルを読めない・書けないって事が原因にあるようです
なので cron で実行されるコマンド(スクリプト)はフルパスで指定して…かつ読み書きするファイルなどもフルパスで設定する必要があります うっかりしてるとやらかしがちなミスなんで注意していきタイネ!

※なお今回紹介した /usr/bin/test/bin/date のパスは我が家でのもので…環境によって違う場合があるので事前に which コマンド等で調べてから使用してください #[Raspberry Pi] #コマンドヘルプ #cron

情報 <3967文字>

ラズパイの Apache で CPU 情報を取得する vcgencmd が CGI で動かない問題を解決する

20211205061157-admin.png
 
Raspberry Pi 4 (ラズパイ) に CPU のクロック周波数や温度やらを取得する vcgencmd なるコマンドが用意されています
CPU などなどのクロック周波数を表示
for src in arm core h264 isp v3d uart pwm emmc pixel vec hdmi dpi ; do echo -e "$src:\t$(vcgencmd measure_clock $src)" ; done
CPU の温度を表示
vcgencmd measure_temp
利用可能・不可能なコーデックの表示
for codec in H264 MPG2 WVC1 MPG4 MJPG WMV9 ; do  echo -e "$codec:\t$(vcgencmd codec_enabled $codec)" ; done

20211205053433-admin.png
実行例

その他にもいろいろあるんで…詳しくは 解説ページをご覧ください って感じの vcgencmd コマンドなんですが Apache 上の CGI として実行させようとすると失敗するんでその辺をどうにかしてみます

まぁ結論から云ってしまうと…グループ video に Apache が実行するユーザである www-data が入っていないから動かないって事らしいです
cat /etc/group | grep video
video:x:44:pi

ちなみに Apache が実行するユーザは /etc/apache2/envvars で指定しているようです
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

試しにコマンドラインでユーザを www-data に切り替えて確認してみましょう
sudo su -s /bin/bash www-data
vcgencmd measure_temp
VCHI initialization failed
やはり使えないみたいですね…

それじゃグループ video にユーザ www-data を追加していきましょう まぁコマンド一発なんですが
sudo usermod -aG video www-data
これで追加できます 確認すると…
cat /etc/group | grep video
video:x:44:pi,www-data
グループ video にユーザ www-data が追加されました

それでは再びユーザを www-data に切り替えて確認してみましょう
sudo su -s /bin/bash www-data
vcgencmd measure_temp
temp=28.2'C
ちゃんと使えるようになりました

  :

しかし Apache 上の CGI として vcgencmd コマンドを実行しても「VCHI initialization failed」のエラーが出続けます なんで??
いろいろと試していて…まぁはっきりとした理由は不明なんですが Apache を再起動させたらこの問題が解決しました
sudo systemctl restart apache2
これで Apache 上の CGI として vcgencmd コマンドが使えるようになりました 何か別の所に問題があるかもだけど…我が家の環境ではこの手法で解決できました

202112050534331-admin.png
そんな操作の過程のスクリーンショットをぺたり 改竄の余地のないよう作業の過程を全て収録してあります

※参考資料 グループからユーザを削除するには…
トラブルの解決中っていうか…いろいろやってて勢い余って必要のないユーザをグループに追加しちゃった!(>_<)qって時なんかにグループからユーザを削除する場合には以下のようにします
例えばグループ video に追加されたユーザ www-data を削除する場合は
sudo gpasswd -d www-data video
こんな感じに操作します 先ほどの usermod の場合とユーザ名とグループ名の指定が逆になってるので注意が必要です なんなら gpasswd -a でグループにユーザを追加することができるらしいんですが…どっちを使うといいんだろうね

  :

さてさてそんな vcgencmd を使ってこんな感じで動かしています
 (キャプション自動取得対象外) その都度都度で PNG 画像を生成しています
Web サーバの処理やら画像の生成などで一時的にクロック高めな感じですがアイドル時は 600MHz くらいになってるようです
そんなこんなで何かの都合でラズパイを再セットアップした際に悩まないようなメモでした #[Raspberry Pi] #Apache #コマンドヘルプ #CGI

情報 <2063文字>

ラズパイの頻度低めだけど知っておきたい設定メモ Vol.3

20211203180402-admin.png
 
・ラズパイとファイルのやり取りしたい
・ラズパイのアプリを PC 上で実行する?

  :

----- ラズパイとファイルのやりとりしたい -----

ファイル共有に samba サーバを建てるほどじゃないんだけど… PC とちょっとしたファイルのやりとりをしたい!って場面はちょくちょくあると思います そんな時は scp コマンドを使うと良いみたいです

使い方
scp [オプション] コピー元 コピー先

オプションはいろいろあるけど…よく使うものを勝手に抜粋(汗
-p 元のファイルの変更時間とアクセス時間およびモードを維持します
-r ディレクトリ全体を再帰的にコピーします

PC からラズパイにファイルを送信する その1
scp ./dir/filename.ext pi@hostname:
PC 上の ./dir/filename.ext ってファイルをラズパイにコピーする この場合…ユーザ pi のホームフォルダ (/home/pi) に filename.ext がコピーされる

ラズパイから PC にファイルを受信する その1
scp pi@hostname:/var/www.html/index.html ./
ラズパイ上の /var/www.html/index.html が PC 上のカレントフォルダに index.html としてコピーされる

PC からラズパイにフォルダを送信する その2
scp -pr ./pic pi@hostname:
PC 上の ./pic ってフォルダとその中身の全てをファイル更新日時・モードを保持したままラズパイにコピーする この場合…ユーザ pi のホームフォルダ (/home/pi) に pic フォルダを作成してコピーする

ラズパイから PC にフォルダを受信する その2
scp -pr pi@hostname:/etc/apache2 ./
ラズパイ上の /etc/apache2 ってフォルダとその中身の全てをファイル更新日時・モードを保持したまま PC に apache2 フォルダを作成してコピーする
※ ただし /etc/apache2 はユーザ pi で読めるけど…逆に書き込もうとすると root 権限が無いんで失敗しますが

hostname は IP アドレスでも OK です ファイル名にはワイルドカードも使えるようです

2018 年 4 月頃のアップデートで Windows 10 に OpenSSH ってのが導入されているらしく…その時に scp コマンドが入ったようです
20211024175230-admin.png
202110241752301-admin.png
試しに使ってみたところちゃんとコピーできたようです

  :

----- ラズパイのアプリを PC 上で実行する? -----

ラズパイ上で動くアプリケーションの画面を PC 上に持ってくることができるようです

使い方
ssh [オプション] pi@hostname

オプションはいろいろあるけど…よく使うものを勝手に抜粋(汗
-Y 信頼できるX11転送を有効にします
-C データ転送を圧縮します

普通に SSH による接続なんですが…ファイルマネージャ (pcmanfm) とかのグラフィカルなアプリケーションの実行画面を PC 上で再現できるようになるようです
SSH でログインした後にコマンドラインに実行したいアプリケーションのコマンドを打ち込み実行します
pcmanfm :ファイルマネージャ
lxtask :タスクマネージャ
lxterminal :LXTerminal
例えば上記のようなコマンドです

20211024175159-admin.png
Ubuntu MATE 上に再現されたラズパイのアプリケーション画面 心もち再現しきれてないものもあるけどご愛嬌かな
ファイルマネージャからイメージビューワなんかを起動するとその画面も PC 上に出てきます
ただしログインしたユーザ権限で動作できるアプリケーションに限るようです
macOS 系ではできたって話を聞いたことがあります Windows 系ではできないかも知れません(汗

そろそろネタが尽きてきたかな…って感じで長々とお疲れさまでした! #[Raspberry Pi] #コマンドヘルプ

  ●ラズパイの頻度低めだけど知っておきたい設定メモ Vol.3
  ●ラズパイの頻度低めだけど知っておきたい設定メモ Vol.2
  ●ラズパイの頻度低めだけど知っておきたい設定メモ Vol.1
  ●ラズパイで Apache2 サーバを建ててゆるい設定をする
  ●モニタ無しでラズパイを VNC 接続できるとこまでセットアップ

情報 <2042文字>

ラズパイの頻度低めだけど知っておきたい設定メモ Vol.2

20211203175809-admin.png
 
・テキストエディタ nano の超基本の使い方
・ユーザを切り替えて root で作業したい
・ラズパイは sudo した時にパスワードを聞かれないのは何故?

  :

----- テキストエディタ nano の超基本の使い方 -----

端末上(LX Terminal等)でテキストファイルを編集するには vi か nano を使うことになるんだけど… vi は操作感が少々特殊でとっつきにくいんでその辺が判りやすい nano を使うことが多いのかな?って事でその nano を初めて使う方向けの超基本の使い方の解説です

コマンド名は nano です 管理者権限で使いたい時は sudo nano って感じで使います
nano もしくは sudo nano とコマンド名のみで起動すると「新規ファイル」の編集として起動します nano 「ファイル名」 とファイル名を付けて起動すると「ファイル名のファイル」を編集します

202110181533153-admin.png
nano とだけ打ち込み起動した状態
よく使う(と思われる)コマンドが下部に記載されています
この中の 「^G ヘルプ」 とか 「^X 終了」 の「^」意味は以下のようになっています

ショートカットキーの記法は以下の通りです。(^)で表記されているショートカットはCtrlキーを押すか、Escキーを二回続けて押すことを表してします。(M-)で表記されているショートカットはAltキーCmdキーEscキーなどのメタキーを押して入力します。
 また、Escキーを二回押した後に000から255までの十進数を入力することで、コードに対応する文字を入力することができます。以下のキーストロークは主なエディタのウィンドウで使用できます。代替のキーストロークは括弧で囲って表記されます。


試しに Ctrl キーを押しながら G キーを押してみましょう
202110181533152-admin.png
nano のヘルプが表示されました
長くて表示しきれてないんでキーボードの ↑ キーと ↓ キーを使ってスクロールさせます
ヘルプの終了は Ctrl キーを押しながら X キーを押します
いっぱいコマンドがあって覚えきれなさそうだけど…実際には「ちょっと編集を」って感じなんで数個のコマンドを使うだけになると思います

そんなよく使うコマンド例

Ctrl + X :nano の終了 ファイルに変更がなければそのまま終了します 変更があれば保存するか破棄するか聞いてきます
Ctrl + O :ファイルの書き込み 新規ファイルとして編集していればファイル名を聞いてきます 既存ファイルを編集していればそのファイル名が表示されそこに保存します
Ctrl + S :ファイルを確認なしで保存する 慣れてくるとこれをよく使います
Ctrl + W :文字列の検索 指定した文字列が見つかればカーソルがその文字列の場所に移動する さらに次の文字列を探す場合には Alt + W もしくは Alt + で…逆向きに探す場合には Alt + Q もしくは Alt + と操作します
Ctrl + / :文字列の置換 探す文字列を指定した後に置き換える文字列を指定します 見つかった時に「1箇所置換」するか「全部を置換」するかを聞いてきます
Alt + # :コメント行の切り替え カーソルがいる行の先頭に # を付ける/付けないを繰り返す わりと便利なんでよく使う

だいたいこんなもんですかね しょーみもっと込み入った編集をしたい時には GUI で操作できる mousepad とかを使ったほうが判りやすくて便利だと思います ただ nano は諸々の設定作業なんかで「使わない訳にはいかない」テキスト・エディタなんで最低限の操作は覚えておきたいものです

  :

----- ユーザを切り替えて root で作業したい -----

サーバの設定をしてる時とかに…いちいち sudo + コマンド ってやるんがめんどくさい!!(-_-#)って時に感情に任せて root にチェンジして作業したいと思ったことはありませんか? 私はたまにあります…って事なんでその辺の話を少々

202110181533155-admin.png
通常はユーザ pi で作業してるんだけどこれをユーザ切り替えの su コマンドを使って管理者 root になろうとするんだけど…認証失敗して root になれません これは root にパスワードが設定されてないんで「パスワードによる認証ができない」ってのが原因のようです

まぁこれを解決するには root にパスワードを設定すればいいんだけど…世間的にはセキュリティ云々の事情で root にパスワードを設定すべきではないって事なんでちょっと躊躇しちゃいますね ※ root にパスワードを設定すると SSH などで root ログインできるようになるんで好ましくないらしいのです

しかしこれが実機の前に居るのであれば別の方法でどうにかできます LXTerminal を sudo で起動してみましょう

202110181533154-admin.png
sudo x-terminal-emulator
無事(?)に root に切り替えることができました
でもまぁ何でもできる管理者 root なんで…くれぐれも慎重な操作をお願いします(汗

※ 追記 ※
別のシェルでログインを試みるって手法をもっと試してみるっていうか…なんか su コマンドにシェルを指定するオプションがあるのに気づいたんでそっちも試してみることにします
sudo su -s /bin/bash root
これで root に切り替えることができました こっちのほうがスマートな操作って感じなのかな

ちなみにオプション指定の違いがあるっていうか…
20211205041659-admin.png
sudo su -s /bin/bash root
sudo su -s /bin/bash - root
「-」オプションを付けない時はコマンドを実行したユーザのホームディレクトリ・環境変数が引き継がれて
「-」オプションを付た時は指定したユーザのホームディレクトリ・環境変数に設定されるようです

※ さらに追記 ※
もうちょっとシンプルにっていうか sudo -isudo susudo su - でもいいみたい
この場合もそれぞれ環境変数の引き継ぎに違いがあったりするようです 使いやすい手法を覚えておきタイネ!

  :

----- ラズパイは sudo した時にパスワードを聞かれないのは何故? -----

Ubuntu などを使っている時に sudo すると…
202110181533151-admin.png
パスワードを聞かれます

20211018153315-admin.png
でも Raspberry Pi OS の sudo だとパスワードを聞かれません これは何故なんでしょう?

まぁ sudo がそう云う設定になってるんですけどね…って事でその設定を見てみましょう sudo の設定内容は sudo cat /etc/sudoers で確認することができます
その中に %sudo ALL=(ALL:ALL) ALL なんて行があります これはグループ sudo に属する全てのユーザが全てのコマンドを実行できるって定義らしいです

それではグループ sudo に誰が属しているのか見てみましょう これは sudo getent group sudo で確認できます おそらく sudo:x:27:pi ってなってると思うんだけど…まぁグループ sudo にユーザ pi が含まれているのが判ります この設定によりユーザ pi が sudo した時に全てのコマンドが使えるって事になるらしいです

ちなみに /etc/sudoers は極めて重要なファイルなんで直接編集しないほうがいいらしいです これを編集するには専用コマンドの sudo visudo を使います なんでも書き込んだ内容に間違いがないか構文チェックして正しければ書き込むって感じになってるらしいです

まぁそれはともかく sudo した時にパスワードを聞かれないって話でしたよね これはさらに細やかな設定ファイルが /etc/sudoers.d/ に入ってるらしいのでそれを sudo cat /etc/sudoers.d/010_pi-nopasswd で確認してみましょう
すると pi ALL=(ALL) NOPASSWD: ALL ってのがあります この NOPASSWD ってのがパスワードを聞かれないための設定らしいです
この /etc/sudoers.d の設定ファイルも直接書き換えるのではなく専用コマンドの sudo visudo -f /etc/sudoers.d/010_pi-nopasswd を使うらしいです

まぁただそれだけの話なんですけどね モヤモヤしてた謎が解けたらイイネ!って感じで長々とお疲れさまでした! #[Raspberry Pi] #コマンドヘルプ

  ●ラズパイの頻度低めだけど知っておきたい設定メモ Vol.3
  ●ラズパイの頻度低めだけど知っておきたい設定メモ Vol.2
  ●ラズパイの頻度低めだけど知っておきたい設定メモ Vol.1
  ●ラズパイで Apache2 サーバを建ててゆるい設定をする
  ●モニタ無しでラズパイを VNC 接続できるとこまでセットアップ

情報 <3977文字>

ラズパイの頻度低めだけど知っておきたい設定メモ Vol.1

20211203174442-admin.jpg
 
・有線 LAN 接続時の固定 IP な設定
・ホストネームの変更
・ファイルマネージャを root 権限で使う
・Raspberry Pi の基盤穴サイズ

  :

----- 有線 LAN 接続時の固定 IP な設定 -----

/etc/dhcpcd.conf を編集
# Example static IP configuration:
#interface eth0
#static ip_address=192.168.0.10/24
#static ip6_address=fd51:42f8:caae:d92e::ff/64
#static routers=192.168.0.1
#static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1


この部分で設定する 必要な行の先頭の # (コメント記号)を消して有効にして必要な内容に書き換える
以下は設定例(IP アドレスが 192.168.0.80 でゲートウェイ(ホームルータ)アドレスが 192.168.0.100 で Google のパブリック DNS を使用の場合)

# Example static IP configuration:
interface eth0
static ip_address=192.168.0.80/24
#static ip6_address=fd51:42f8:caae:d92e::ff/64
static routers=192.168.0.100
static domain_name_servers=8.8.8.8 8.8.4.4

ファイル保存後に OS を再起動することにより有効になる

  :

----- ホストネームの変更 -----

/etc/hostname を編集
標準状態で raspberrypi が設定されているのでそれを適宜書き換える

sudo nano /etc/hosts で編集
最終行の 127.0.1.1    raspberrypi の raspberrypi の部分を上記と同じものに書き換える

ファイル保存後に OS を再起動することにより有効になる

  :

----- ファイルマネージャを root 権限で使う -----

重要なファイル類の操作や編集を GUI でどうにかしたい時に便利かもしれないけど危険かも知れない(汗
ターミナル内で sudo pcmanfm としてもいいんだけど…何かと面倒なんでアプリケーションランチャーに登録しておく

DESKTOP ファイルとか云うものを作成する ※既にあるファイルマネージャのものをコピーして編集する
sudo cp /usr/share/applications/pcmanfm.desktop /usr/share/applications/pcmanfm_sudo.desktop

sudo nano /usr/share/applications/pcmanfm_sudo.desktop
Icon=system-file-managerIcon=user-desktop に変更する ※アイコンは何でもいいんだけど…個人的にこの辺が判りやすいアイコンだったんでこのようにした
Name=File Manager PCManFMName=File Manager sudo に変更する
Name[ja]=ファイルマネージャ PCManFMName[ja]=ファイルマネージャ sudo に変更する
GenericName[ja]=ファイルマネージャGenericName[ja]=ファイルマネージャ sudo に変更する
Exec=pcmanfm %UExec=sudo pcmanfm %U に変更してファイルを保存する

202110161733492-admin.png
デスクトップの「ランチャアイコン上」で右クリックしてメニューを出しアプリケーション・ランチャー Settings をクリック

202110161733491-admin.png
何故か「システムツール」に入っているファイルマネージャ sudo を選び 追加(A) ボタンを押す

20211016173349-admin.png
新しい「ランチャアイコン」が追加された

202110161747561-admin.png
root 権限なんで(概ね)どのフォルダ/ファイルでも操作できる その際にツールバーの左端に「現在あなたは管理者権限で操作しています」を表す マークが表示されています
そしてもちろん右クリックでメニューを出して各種操作もできる

20211016174756-admin.png
メニュー操作により root 権限が必要なファイルの編集もできる
ただしシステムに関連した重要なファイルの変更などで取り返しのつかない事態に陥る危険性もあります 使用には細心の注意が必要です!

  :

----- Raspberry Pi の基盤穴サイズ -----

Raspberry Pi の基盤穴サイズっていうか…適合するボルト径ですかね
20211016234940-admin.jpg
M2.5 ってやつがピッタリ合うようです M3 だと微妙に太くて通らないようです
設定って話じゃないけど…ちょっと気になったんでメモしておきます

今回はここまで! 長々とお疲れさまでした! #[Raspberry Pi] #コマンドヘルプ

  ●ラズパイの頻度低めだけど知っておきたい設定メモ Vol.3
  ●ラズパイの頻度低めだけど知っておきたい設定メモ Vol.2
  ●ラズパイの頻度低めだけど知っておきたい設定メモ Vol.1
  ●ラズパイで Apache2 サーバを建ててゆるい設定をする
  ●モニタ無しでラズパイを VNC 接続できるとこまでセットアップ

情報 <2516文字>

DASHBOARD

■全文検索:

複合検索窓に切り替える

■複合検索:

  • 投稿者名:
  • 投稿年月:
  • #タグ:
  • カテゴリ:
  • 出力順序:

■ハッシュタグ:

■カテゴリ:

■日付検索:

■機器状態:

Raspberry Pi 4 Status

編集

RSSフィード