Processing math: 33%
スキップしてメイン コンテンツに移動

Raspberry Pi に ssh で 接続できない 又は 接続したがすぐに切断されたりする現象について

Raspberry Pi ZeroW に ssh接続 を行い操作をしていたが、いつ頃からかうまく繋がらなくなった。
症状としては次のような状況だった。
  • ssh接続するもクライアント側のモニタには何も表示されない
  • うまく接続できてもすぐに切れてしまう
  • キーボードからの入力が表示されるまでにとても時間がかかる
このような状況であったが、vncでは接続できていた。
その為、vncで画面を映し、ターミナルを立ち上げて操作することで凌いでいた。
この状況の原因ははっきりとわからないが、次の記事を参考に対応した。

Disable power management in Stretch https://www.raspberrypi.org/forums/viewtopic.php?t=194619


行うことは次の2つ。
  • 無線モジュールの電源管理を無効にする
  • sshd_config の ClientAliveInterval を有効にする

無線モジュールの電源管理

対応したラズベリーパイはbusterである。
$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 10 (buster)
Release:        10
Codename:       buster

起動時のログを確認してみるとオンボードの無線LANの省電力モードが有効になっている。
$ dmesg | grep brcm
[   15.998658] brcmfmac: F1 signature read @0x18000000=0x1541a9a6
[   16.018794] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43430-sdio for chip BCM43430/1
[   16.019229] usbcore: registered new interface driver brcmfmac
[   16.285029] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43430-sdio for chip BCM43430/1
[   16.285227] brcmfmac: brcmf_c_process_clm_blob: no clm_blob available (err=-2), device may have limited channels available
[   16.286454] brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM43430/1 wl0: Oct 22 2019 01:59:28 version 7.45.98.94 (r723000 CY) FWID 01-3b33decd
[   26.054895] brcmfmac: brcmf_cfg80211_set_power_mgmt: power save enabled

これはiwconfigコマンドでも確認できる。

電源管理を無効にするためには次のコマンドを実行する。
$ sudo iwconfig wlan0 power off

この設定は再起動すると元に戻る。
起動後に実行するには、/etc/rc.local の exit 0; の前にコマンドを記入する。
$ tail /etc/rc.local 

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

# wifi power management
iwconfig wlan0 power off

exit 0

再起動後に無効になっていることを確認する。

sshdの ClientAliveInterval を有効にする

sshd_config ファイルの設定を確認すると、 ClientAliveInterval が無効になっている。
$ grep Alive /etc/ssh/sshd_config

#TCPKeepAlive yes
#ClientAliveInterval 0
#ClientAliveCountMax 3
  
次のように変更した。
$ grep Alive /etc/ssh/sshd_config

#TCPKeepAlive yes
ClientAliveInterval 10
#ClientAliveCountMax 3
  
sshdを再起動する。


これでしばらく様子を見ることにする。


[2020-06-29 追記]
しばらく様子を見ていたが、問題が発生しなくなった。
起動メッセージを見ると電源管理が一旦有効になるが、その後に無効になる状況。
sshでの接続時に少し反応は遅れるが、その後は問題なく操作が出来る。

一方だけの設定にしてみるとssh接続がうまく出来ない状況だった。
電源管理を有効のままにした場合、接続がうまく出来ず何も出力されないまま切断される。
ClientAliveInterval を無効にした場合、接続するとログインメッセージが表示されるがプロンプトが表示されない、又は プロンプトが表示後コマンド入力してもレスポンスがない。
入力自体は行えているようで、タイムアウトで切断されている模様。

コメント

このブログの人気の投稿

Ubuntu で RAIDディスクをマウントする

謎のHDDが見つかった。 データを確認するためWindowsにつなぐもマウントされず。 これは extとかffsの辺りかなと思い、Linux(Ubuntu)に繋ぐ。 しかし、自動マウントされない。 取り敢えずマウントする。 # mount /dev/sdb1 /mnt/disk すると'linux_raid_member'とエラー表示された。 ということで、まずファイルシステムを確認。 # parted -l このコマンドでファイルシステムが表示される。 また、Gparted でも表示される。 そこでRAIDディスクを扱うためにmdadmパッケージをインストール。 # apt install mdadm ネットでは mountコマンドの -t オプションで明示的にファイルシステムを指定するとマウントできると書いてあったのでそれを試すとマウントできた。 # mount -t ext3 /dev/sdb1 /mnt/disk 内容を確認すると不要なデータだったのでデータを削除する。 # shred -v /deb/sdb この処理はとても時間がかかるので普段使わないコンピュータで処理をした。

自動ログイン on Lubuntu

Lubuntu 19.04 の 自動ログインを設定してみた。 グラフィカルログインを自動で行うようにしたいが、 ユーザー設定 の中に自動ログインの設定がない。 そこでコマンドラインから設定してみた。 まず、ログインをするときに使用しているディスプレイマネージャを確認する。 cat /etc/X11/default-display-manager /usr/bin/sddm sddm を使っているので、sddm の自動ログインを設定する。 OSは systemd で動いていると設定ファイルがないようなので作成する。 # sddm --example-config > /etc/sddm.conf.d/sddm.conf この設定ファイルに Autologin について書いてあるのでここにユーザ名を入力。 head /etc/sddm.conf.d/sddm.conf [Autologin] # Whether sddm should automatically log back into sessions when they exit Relogin=false # Name of session file for autologin session (if empty try last logged in) Session= # Username for autologin session User= ここの User= にユーザ名を書き込み保存後、再起動すると自動でログインされる。

Perl/Tk の基本的なこと

X を利用したアプリケーションを作る方法は色々あるが、Tk を用いると簡単に出来る。 Tk - Wikipedia https://ja.wikipedia.org/wiki/Tk_(ツールキット) Tk で作るWindowをどの言語で書くかによって変わってくるが、Tcl/Tkが最も有名かもしれない。 Tcl/Tk - Wikipedia https://ja.wikipedia.org/wiki/Tcl/Tk wish (Windowing Shell) を用いてスクリプトを組むことでグラフィカルなアプリを作れる。 Tclはこのwishで使われるプログラミング言語であり、簡単に使える。かなり多くのシステムに導入されていることもあり、特に何かをインストールせずとも使うことが出来る。 このTclの部分をperlに置き換えたものがPerl/Tkである。 Perl/Tk インストール Perl/Tk は Tcl/Tk と違いデフォルトでインストールされていないことが多い。 ubuntuだと perl-tk をインストールすると使えるようになる。 # apt install perl-tk 取り敢えず作ってみる 次のようなサンプルファイル sample.pl を作る。 sample.pl use utf8; use Tk; # トップウィンドウを作る top = MainWindow->new(); # ウィンドウ内に文字(ラベル)を表示する label = top->Label(-text => "ここに文字を書く")->pack(); # ウィンドウを生成する MainLoop(); ちなみに文字コードは UTF-8 になってる。 file sample.pl sample.pl: UTF-8 Unicode text 次のコマンドで実行する。 $ perl sample.pl 実行できる形の sample.pl Shebang を書いて実行ファイルとしても実行できる。 たぶん次のようなファイルになる。 一行目のShebangは環境によって異なるが多くのシステムは多分これで通る。 #!/usr/bin/perl use utf8; use...