ひゃまだのblog

ひゃまだ(id:hymd3a)の趣味のブログ

RTNETLINK answers: Operation not possible due to RF-kill エラー対策

(2022-02-03 初稿 - 2022-02-04 追記)

はじめに

Raspberry Pi 3B+に、Debian 11(Bullseye) arm64版をインストールして、一足先に64bit環境を楽しもうと思いインストールした。

インストールの方法や細々とした設定については、別ページにアップする。

ここでは、Debian 11をインストール後のRaspberry PiWi-Fi設定に手こずったので、その対策をアップする。

現象

別ページに記載した方法で、Debianをインストールするとネットワークの制御は以下のファイルで行う。

cat /etc/network/interfaces.d/eth0

auto eth0
iface eth0 inet dhcp
iface eth0 inet auto

有線ケーブルを接続しDHCP環境で利用する場合は全く問題がないが、ケーブルの取り回しが面倒な場所にRaspberry Piを置きたかったので、Wi-Fiで接続することにした。

# To enable wireless networking, uncomment the following lines and -naturally-
# replace with your network's details.
#
allow-hotplug wlan0
iface wlan0 inet dhcp
iface wlan0 inet6 dhcp
     wpa-ssid YOUR-SSID
     wpa-psk JugemuJugemu

wlan0 ファイルができたので、以下のコマンドでWi-Fiを有効にしようとしたところ、以下のエラーメッセージが出た。

$ sudo ifup wlan0
RTNETLINK answers: Operation not possible due to RF-kill
(以下省略)

ネットで検索するとrfkillコマンドで確認できるとのことで、rfkillをインストールして、確認。

$ sudo apt install rfkill
$ sudo rfkill list
0: phy0: Wireless LAN
    Soft blocked: yes
    Hard blocked: no
1: hci0: Bluetooth
    Soft blocked: yes
    Hard blocked: no

どうも、Wireless LANとBluetoothはソフトウェア的に使えなくしているらしい。

余計なことをしおってと思ったが、少ない電力で動かないといけないRaspberry Piには必要な機能かもしれないね。

対策

なるほど、以下のサイトを参照して、blockを解除しよう。

$ sudo rfkill unblock wifi
$ sudo rfkill list
0: phy0: Wireless LAN
    Soft blocked: no
    Hard blocked: no
1: hci0: Bluetooth
    Soft blocked: yes
    Hard blocked: no

おし、ブロック解除だ。

$ sudo ifup wlan0
$ ping 192.168.xxx.xxx  必ずつながるところへping
(省略 成功)

よっしゃー、ということでRaspberry Piを再起動。

$ ping 192.168.xxx.xxx  必ずつながるところへping
(省略 失敗 (T_T) )

なんで、(・・?

$ sudo rfkill list
0: phy0: Wireless LAN
    Soft blocked: yes
    Hard blocked: no

また、ブロックしてるじゃん。

ネットで検索して以下のページ発見。多謝 m(__)m。

$ connmanctl enable wifi

ということで、connmanctlで設定した場合は、再起動してもWi-Fiが無事に使えた。

Raspberry PiWi-Fiにつなげるだけで、どっと疲れた。

それにしても、connmanctlなんてコマンド初めて知った。

Linuxは何年使っていても、学ぶこと一杯だね。^^;

関連ページ

Chrome Remote Desktopのインストールとわが家のネットワーク

(2022-02-02 初稿 - )

はじめに

Chrome Remote Desktopというネットワークサービスがあり、これを用いれば自宅や職場のPCに遠隔地から接続して操作できるようになる。

筆者は忘れ物が多く、ファイルや趣味で撮影した写真を職場等で取り出すために、Chrome Remote Desktopを利用してみたので、そのメモを残す。

我が家のネットワーク

まず最初にわが家のネットワークについて、簡単に下図で説明する。

  • Chrome Remote Desktopのアクセス先(以下、リモートサーバ)は、電源ONでないとアクセスできないので、省電力のノートPCを24時間電源稼働している。省電力というと聞こえはいいが、要は古いノートPCにDebianをインストールして利用している。(^^ゞ
  • PC作業の大半は、DebianのインストールされたデスクトップPCで行っており、ここにファイルや写真等が保存されていることが多い。
  • また、省電力のRaspberry Piは24時間稼働しており、大容量のハードディスクを接続してファイルサーバとして利用している。
  • Raspberry PiとリモートサーバのノートPCは24時間稼働だが、デスクトップPCやWindowsのノートPCは通常電源OFFで、必要なときにWakeOnLANで起動する。
  • 遠隔地からは、Chrome Remote Desktopでリモートサーバにアクセスして、必要に応じて起動したデスクトップPCやWindowsノートPC、常時稼働のRaspberry Pi等にSSHVNCで接続して作業を行う。

f:id:hymd3a:20220131201624j:plain

わが家のネットワーク構成

Chrome Remote Desktopのインストール

まずは、自分のGoogle アカウントでChromeにログイン後、以下のサイトに行く。

WindowsMacのPCならば、すんなりインストール可能と思われるが、筆者のDebianのノートPCだったので、少しだけ苦労した。^^;

f:id:hymd3a:20220131202247p:plain

Chrome Remote Desktopのインストール開始


上図の青いダウンロードボタンを押すと、ダウンロードが始まってインストールが開始されるが、管理者権限がないのでインストールが先に進まない。^^;

インストールが中断したら、ターミナルで以下のコマンドを入力すると無事インストールできる。 

$ sudo apt install ~/Downloads/chrome-remote-desktop_current_amd64.deb

インストールが中断し、少しあわてたが、無事にインストールできると以下の2つを入力する。

f:id:hymd3a:20220202105233j:plain

PC名の入力

遠隔地からもわかりやすいPC名を入力する。

f:id:hymd3a:20220202105338j:plain

PINの入力

セキュリティのためのPIN(6桁以上の数値)を入力。

サーバは、Chromeブラウザを立ち上げておく必要もなく、ログアウトしていても電源ONであればリモートからの接続は可能である。

Chrome Remote Desktop クライアントからの接続

クライアントにはソフトウェアのインストール不要で、自分のGoogleアカウントで以下のサイトにアクセスすると先程設定したサーバのPC名があるので、接続したPC名をクリックすれば接続できる。

その他の細々とした設定

ノートPCのディスプレイを閉じてもサスペンド等しないように

以下の記事を参考に、設定をした。

sudo vi /etc/systemd/logind.conf
HandleLidSwitch=suspend    (変更前)
HandleLidSwitch=ignore     (変更後)

変更したら、再起動でディスプレイを閉じてもサスペンドしないようになる。

WakeOnLANでPCの電源をONに

拙作の記事だが、以下にリンクを貼っておく。

 

関連ページ

Debian PCをWake On LANで起動できるようにしたよ

(2022-01-31 初稿 - 2022-11-01 追記)

はじめに

Chrome Remote Desktopを利用すると、多くの場合ネットワークの設定を変更せずに職場や自宅のネットワークにアクセスできるようになる(職場のPCにリモート接続する場合は、許可が必要な場合がある)。

少なくとも、職場のPCから自宅のPCにアクセスできれば、ファイルの忘れ物等は防ぐことができて便利だ。

ここでは、Wake On LANで起動する側のPCを「起動PC」、起動を命令するPCを「命令PC」と呼ぶことにする。

Wake On LANの設定

以下のサイトを参照し設定した。多謝 m(__)m

設定したPCの環境(起動PC、命令PCともに)

Debian  Bullseye
Linux 5.10.0-11-amd64 #1 SMP Debian 5.10.92-1 (2022-01-18) x86_64 GNU/Linux

現状の確認

まずは、起動PC(Wake On LANされる側PC)の現在の状態を確認する。

上記のサイトに従って、ethtoolをインストール。

sudo apt install ethtool

自身のネットワークを確認する。

less /etc/network/interfaces
iface enp12s0 inet dhcp

sudo ethtool enp12s0
  Wake-on: d (dの場合は WakOnLAN不可)

Wake On LANを可にする方法は、以下のドキュメントのとおりいろいろあるが、筆者はinterfacesを変更する方法にした。

cat /etc/netword/interfaces
(省略)    
auto enp12s0
iface enp12s0 inet dhcp
        ethernet-wol g

設定したら、再起動する。

Mac Addressの調査

最近のDebianは、ifconfigではなく、ip addressでネットワークの状態を調べるので、以下のコマンドでMac Addressを調べる。

$ ip a
(省略)
2: enp12s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 169.254.9.128/16 brd 169.254.255.255 scope link enp12s0:avahi
       valid_lft forever preferred_lft forever
(省略)

上の出力の「link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff」 の行のether直後の6つの16進数がMac Address。

これをメモしておく。

(2022-11-01 追記)

職場のASRock Z170 Extreme4で実行した結果、以下のようにBIOSを変更しないとWakeOnLANできなかったので追記。

起動時にF2またはDELキーでBIOSメニューを起動

Adbanced  -> ACPI Configureation -> PCIE Devices Power On: Enabled
(これにより、電源OFF時にもEthernetケーブルが接続されたHUBのランプが点く)
Boot -> Boot From Onboard LAN: Enabled

(追記終了)

WakeOnLANを命令する側PCの設定

$ sudo apt install wakeonlan
$ wakeonlan MAC Address

毎回MAC Addressを入力するのも面倒ですので、以下のBashスクリプトを作成。

なんと作成の日付は、2004年(・o・)。かなり以前に作ったスクリプト

ここでは、kawaとnijiというhostnameのPCを起動できるようにした。

$cat ~/bin/wol
#!/bin/sh
# wol ver0.01 2004/02/03-
# Written by H.Yamada

case $1 in
    kawa | KAWA | Kawa ) echo "Wakeup kawa"
	 wakeonlan -i 192.168.xxx.255 xx:xx:xx:xx:xx:xx ;;
    niji | NIJI | Niji ) echo "Wakeup niji"
	 wakeonlan -i 192.168.xxx.255 xx:xx:xx:xx:xx:xx ;;
    * ) echo "error:  $1 is unknown machine"
	echo "Usage: wol machinename"
	exit 1 ;;
esac
exit 0

もちろん、MAC AddressやPCの増減は、お手元の環境に合わせてね。

関連ページ

eskk.vimで日本語入力してみたよ

(2022-01-28 初稿 - )

はじめに

最近、ネットワーク接続してRaspberry PiやリモートPCに接続し、Vimで日本語入力を行うことが多くなってきた。

普段は、Debianを使っているのでfcitx-mozcで日本語入力しているが、どのPCに接続していても、常にお気に入りの日本語環境になるのは素晴らしいかなと思い、Vimではeskkを使ってみようと思った。

eskkの詳しいことは、他所に譲るとして、eskk(skk)の日本語入力方法は変わっていて、漢字やカタカナの区切りを以下のように自分で認識させる。

例えば「日本語入力モードは変わっている。」を入力する場合は、挿入モードで、C-jで(eskk)モードになってから、以下のように入力する。

Nihongonyuuryoku(Space)Modo(q)haKawaTteiru.

eskk.vimのインストール

筆者は、Vimの標準パッケージ管理を利用しているので、インストールは以下のとおり。

cd ~/vim/pack/mypkg/start
git clone https://github.com/vim-skk/eskk.vim.git

辞書をいただきて、以下のところに保存。

Download SKK-JISYO.L
mv SKK-JISHO.L ~/.eskk

.vimrcには、以下のサイトを参考に記述。

" eskk
let g:eskk#directory = "~/.eskk"
let g:eskk#dictionary = { 'path': "~/.skk-jisyo", 'sorted': 0, 'encoding': 'utf-8', }
let g:eskk#large_dictionary = { 'path': "~/.eskk/SKK-JISYO.L", 'sorted': 1, 'encoding': 'euc-jp', }
set imdisable

簡単な使い方

C-j eskkモード
S-英数 or ; で変換モード    spaceで変換 
l 半角英数 
L 全角英数
q カタカナ  変換モードで後からqを押しても可

カスタマイズ

以下のサイトを参考にカスタマイズを少しだけした。

let g:eskk#keep_state = 1                " eskkモードを保存
let g:eskk#egg_like_newline = 1      " 漢字変換を確定後改行しない

eskkモードを保存は、挿入モードからノーマルモードに戻って、再度挿入モードに戻ったときに、前回の挿入モードの状態を保持してくれているモードである。便利な反面、副作用もあるので、あくまでもお好みで。

おまけ

neoconplcacheを以下からインストールして、.vimrcに記述するとすごい単語補完ができるそうなのだが、まだ筆者は試していない。(^^ゞ

let g:eskk#enable_completion = 1

関連ページ

vimの標準パッケージ管理を使うことにしたよ

(2022-01-26 初稿 - )

久しぶりに使いたいパッケージがあって、Vimの設定を見直した。
これまではVundleを使っており、使ってというよりは、数年前に設定してそのままだった。(^^ゞ
すっかり使い方を忘れてしまったVundleのことを調べていたら、Vim 8.0以降は、標準でパッケージ管理機能があるとか。
筆者のように物忘れが酷くて長い間使っていると、標準で備わっているってことが、結構重要だったりする。だって検索の範囲がVim内だけで済むから。
そこで、このVim標準のパッケージ管理を使ってみることにした。

<ちなみに、今までのBundleは以下のとおり(一部抜粋)。

├── bundle
     ├── googletranslate-vim
     ├── vundle
     └── w3m.vim

標準のパッケージ管理システム

標準のパッケージ管理では、以下のフォルダになる。

この内、mypkgとeskk.vimのフォルダ名は、任意でよいとのこと。

 ├── pack
     └── mypkg
         ├── opt
         └── start
             └── eskk.vim

startディレクトリは、Vim起動時から読み込まれるパッケージ
optディレクトリは、Vim起動後、手動で読み込まれるパッケージ

 

以下、実際に設定してみる。

# パッケージ管理のディレクトリ作成
mkdir -p ~/.vim/pack/mypkg/start
mkdir -p ~/.vim/pack/mypkg/opt

例として、eskk.vimをインストールする。
これが、筆者の使ってみたかったパッケージ。(^^ゞ

$ cd ~/.vim/pack/mypkg/start
$ git clone https://github.com/vim-jp/vimdoc-ja.git

後は、パッケージの指示どおり.vimrcに記述すれば良い。

Vimも、どんどん進化しているなぁ。

関連ページ

Bash,Python,Ruby等のスクリプトを簡単にはてなブログのHTML編集に貼れるように

(2022-01-25 初稿 - 2023-12-06 修正)

はじめに

はてなブログに投稿を始めて、先日アップした記事が100を越えた。
多くの記事は以前アップしていたサイトからの転載だが、2021年5月15日から始め255日で100記事を超えることができた。

はてなで記事を書くことは、とても楽しいのだが、唯一苦痛なことは、スクリプトのソースを貼付ける作業だ。編集(みたまま)モードで貼り付けると、<p>や<br>等のhtmlタグを削除するのが面倒なんだよね。(^_^;)

そこで、Bashスクリプトを作った。

簡単なスクリプトなので、特に解説はしないよ。

#/bin/bash
# src2hb
# bash python ruby等のスクリプトをはてなブログに
# 貼り付けられるように変換
# ver0.01 2022-01-23 Started
# ver0.04 2022-01-23 順番修正
# ver0.05 2023-12-06 bug fix

# Global Variable
USAGE="src2hb Ver0.04 Convert src to hatena blog
[Usage] cat source-script | src2hb"

echo "<pre><code>"
while IFS= read line
#while read line
do
  #echo "$line"
  line=${line//&/&amp;} # 順番大事
  line=${line//</&lt;}
  line=${line//>/&gt;}
  echo "$line"
done
echo "</code></pre>"

使い方

cat some-script | src2hb

筆者は短かいスクリプトしか作らないので、そのままターミナルにたれ流しているけど、リダイレクトしてファイルに保存すれば長いスクリプトでも大丈夫。

cat some-script | src2hb > output.txt

実際にはてなブログに貼るときは、はてなブログをHTML編集モードにしてから貼り付ける。
貼り付けたサンプルは、このページのスクリプトのようになるよ。

関連ページ

Bashの終了ステータスを利用した小技

(2022-01-24 初稿 - )

Bashスクリプトを作っていると、Webでいろいろ調べてとても勉強になる。

今回は、終了ステータスを利用した小技を紹介。

今回は、以下のサイトを参考にさせていただいた。多謝。m(__)m

コマンドを実行後、その成否が終了ステータスに保存される。

例えば、Terminal上で、以下のコマンドを実行した場合、成功した場合としない場合で終了ステータスは以下のとおり。

$ ls dir
$ echo $?
dir ディレクトリがあれば   0
dir ディレクトリがない       2

直前のコマンドの終了ステータスは、$?に保存され成功すれば0である。

終了ステータスを利用した小技

「;」でつなぐ

まず事前の知識として、「;」でコマンドをつないだ場合は、終了ステータスを利用せず、左側のコマンドから順に実行する。

このため、「;」でつないだ場合は、コマンドの実行結果(エラー or 成功)の終了ステータスに関係なく、次の右のコマンドを実行する。

$ ls dir1 ; ls dir2

「&&」でつなぐ

終了ステータスを利用して、複数のコマンドを実行することができる。

例えばディレクトリを作成して、ファイルをコピーして、コピーしたファイルを表示する場合は、以下のとおり。

$ mkdir ~/test-dir && cp a.txt ~/test-dir && cat ~/test-dir/a.txt

「&&」でつなげた場合は、コマンドが成功したときのみ次のコマンドが実行される。

「||」でつなぐ

「&&」でコマンドをつなぐ場合は、成功した場合に次のコマンドを実行したが、「||」でコマンドをつないだ場合は、左のコマンドが失敗した場合に次のコマンドを実行する。

これを使うとエラー処理がとても簡潔に書ける。このページを書いた最大の理由がこの機能だった。(^^ゞ

参考までに、以下の記事で書いたスクリプトは「||」を用いた。

上記スクリプトに以下の記述があり、コマンドを実行した結果、エラーになればオプションを付加

$CMD $* $OPTIONS || $CMD $* --id $OPTIONS

ちなみに、普通にifで書くと以下のとおり。

if [  $($CMD $* $OPTIONS) ]; then
    $CMD $* --id $OPTIONS
fi

Bashって奥が深いなぁ…  と、最近良く思う。

関連ページ