それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

raspberry pi 4 は hdmi から音が出ない事がある。

raspberry pi 4 の debian/bookwarn で hdmi から音が出ない。

VLC の場合でもAnalogが選ばれてしまうことが多い。

Raspi4 では、HDMIとアナログがあるのでアナログが使われる。

ググると、この辺のオーディオ設定が初心者泣かせと書かれていた。わかる気がする。アナログ・オーディオのほうが汎用性が高いんだけど。使う人は減った。Raspi5 ではこの問題は起きない。アナログが排除された。

コマンドから選ぶ。

mpv の場合は、次のコマンドで、オーディオデバイスを一覧できる。

mpv --audio-device=help

一覧を出すとこんな感じ。

takuya@raspberrypi:~ $ mpv --audio-device=help
List of detected audio devices:
  'auto' (Autoselect device)
  'pulse/alsa_output.platform-bcm2835_audio.analog-stereo' (内部オーディオ Analog Stereo)
  'pulse/alsa_output.platform-fef00700.hdmi.hdmi-stereo' (内部オーディオ Digital Stereo (HDMI))
  'alsa' (Default (alsa))
  'alsa/sysdefault' (Default Audio Device)
  'alsa/lavrate' (Rate Converter Plugin Using Libav/FFmpeg Library)
  'alsa/samplerate' (Rate Converter Plugin Using Samplerate Library)
  'alsa/speexrate' (Rate Converter Plugin Using Speex Resampler)
  'alsa/jack' (JACK Audio Connection Kit)
  'alsa/oss' (Open Sound System)
  'alsa/speex' (Plugin using Speex DSP (resample, agc, denoise, echo, dereverb))
  'alsa/upmix' (Plugin for channel upmix (4,6,8))
  'alsa/vdownmix' (Plugin for channel downmix (stereo) with a simple spacialization)
  'alsa/plughw:CARD=vc4hdmi0,DEV=0' (vc4-hdmi-0, MAI PCM i2s-hifi-0/Hardware device with all software conversions)
  'alsa/sysdefault:CARD=vc4hdmi0' (vc4-hdmi-0, MAI PCM i2s-hifi-0/Default Audio Device)
  'alsa/hdmi:CARD=vc4hdmi0,DEV=0' (vc4-hdmi-0, MAI PCM i2s-hifi-0/HDMI Audio Output)
  'alsa/dmix:CARD=vc4hdmi0,DEV=0' (vc4-hdmi-0, MAI PCM i2s-hifi-0/Direct sample mixing device)
  'alsa/usbstream:CARD=vc4hdmi0' (vc4-hdmi-0/USB Stream Output)
  'alsa/plughw:CARD=vc4hdmi1,DEV=0' (vc4-hdmi-1, MAI PCM i2s-hifi-0/Hardware device with all software conversions)
  'alsa/sysdefault:CARD=vc4hdmi1' (vc4-hdmi-1, MAI PCM i2s-hifi-0/Default Audio Device)
  'alsa/hdmi:CARD=vc4hdmi1,DEV=0' (vc4-hdmi-1, MAI PCM i2s-hifi-0/HDMI Audio Output)
  'alsa/dmix:CARD=vc4hdmi1,DEV=0' (vc4-hdmi-1, MAI PCM i2s-hifi-0/Direct sample mixing device)
  'alsa/usbstream:CARD=vc4hdmi1' (vc4-hdmi-1/USB Stream Output)
  'alsa/plughw:CARD=Headphones,DEV=0' (bcm2835 Headphones, bcm2835 Headphones/Hardware device with all software conversions)
  'alsa/sysdefault:CARD=Headphones' (bcm2835 Headphones, bcm2835 Headphones/Default Audio Device)
  'alsa/dmix:CARD=Headphones,DEV=0' (bcm2835 Headphones, bcm2835 Headphones/Direct sample mixing device)
  'alsa/usbstream:CARD=Headphones' (bcm2835 Headphones/USB Stream Output)
  'jack' (Default (jack))
  'sdl' (Default (sdl))

オーディオ出力先を指定。

再生機器をHDMIに指定して、再生すると次のようになる。

DISPLAY=:0 mpv  --fullscreen --audio-device=pulse/alsa_output.platform-fef00700.hdmi.hdmi-stereo

認識していれば、ALSAを選べば良いようです。

DISPLAY=:0 mpv  --fullscreen --audio-device=alsa/sysdefault

認識していないとき

raspi-config で pulse を選べば動くはずなんだが。

この辺はわからないので、明示してALSAを使うほうが無難。

ちなみに、PipeWireを設定した場合は、次のようなデバイス一覧になる。

List of detected audio devices:
  'auto' (Autoselect device)
  'pipewire' (Default (pipewire))
  'pipewire/alsa_output.platform-bcm2835_audio.stereo-fallback' (内部オーディオ Stereo)
  'pipewire/alsa_output.platform-fef00700.hdmi.hdmi-stereo' (内部オーディオ Digital Stereo (HDMI))
  'pulse/alsa_output.platform-bcm2835_audio.stereo-fallback' (内部オーディオ Stereo)
  'pulse/alsa_output.platform-fef00700.hdmi.hdmi-stereo' (内部オーディオ Digital Stereo (HDMI))

ALSAはあるけどpulse に加えて、pipewireが出てくる。

hdmi を使うときはオーディオ注意

あれこれと変更点があって、素直に行かない気はするけど。昔は問題なく動いてたものが、動かなくなるのは辛いけど、Raspiでてから10年も経つし、あれこれ変わってきてるのは仕方がない。

慎重に見れば、まぁ大丈夫でしょう。

ssh 経由でmpv を起動して、動画再生したい。

raspi の64bit OS にはomxplayer がない

omxplayer が死ぬので、代替手段を考える。

omxplayer はその名の通り OpenMax を使ったものである。OpenMAX=OMXである。

しかし、32bit 版だけの対応である。64bit 版では対応していない。OpenMAXからソース提供やライブラリ提供が行われないため64bit版に対応不可能らしい。また、32bit 版は legacy 扱いなので今後の展開は期待できない。また、raspi4 からOpenMAXが外されたので今後の使えることはない。

そのうち対応するのかなと思って3年待ったがもう駄目のようです。

代替方法を考える必要がある。

実現したいこと

RaspiにSSHでログインして、動画を再生したい。

ディスプレイ・ミラーリングじゃ面倒くさいし、手元の動画をリモートに送るのが面倒くさい。

URLを叩いてRaspiに接続されたHDMIモニタに動画を流したい。

手元で見ている動画をテレビで流したい。

デジタルサイネージも同じように管理できる。

もし、遠隔から動画を再生できるのであれば、動画を流すだけのサイネージ・システムも手軽になるわけです。

独立したシステムなど要らず、SSHでコマンドを実行するだけで管理できる。

いままではomxplayer で出来てた

いままではRaspberryPiと HDMIモニタを使ってSSH経由でOMXPlayerを起動だけで、簡単に実現ができていた。

OmxPlayerなら、TVリモコンで「停止・再生」や「早送り・巻き戻し」が可能になって便利だった。

しかしomxplayer は死んだ。

omxplayer の代替としてのmpv

Xウインドウに直接画面を表示するにはいくつか方法があるが、キーボードから操作ができるものはmpv以外には無い。

そこで、mpv を使うことにする。

mpv でサイネージ(リモート再生)

例えば、次のようにすれば、mpv で再生ができる。

DISPLAY=:0 mpv  --fullscreen 'http://192.168.100.5/sample.mp4

--fullscreen--fs でもいけるっぽい

mpv のインストール

mpv は apt install でインストールが可能

sudo apt install mpv 

簡単です。

mpv の操作

キーボードショートカットで操作できる。

fは、小文字です。Aは大文字(Shift+a) です。

キー 効果
f フルスクリーン切替
O(オー) 時間表示切替
P 画面表示(押してるときだけ)
p pause ポーズ 切替
SPACE pause ポーズ 切替
1分進む
1分戻る
5秒進む
5秒戻る
} 再生速度 倍(200%)
{ 再生速度 半分(50%)
] 再生速度 +10%( 1.1倍, 1.21倍, 1.33倍...)
[ 再生速度 +10%( ..1.33倍, 1.21倍, 1.1倍, 1.0, 0.91, 0.83...)
BACKSPACE 再生速度 1.0倍に戻す
9 ボリュームアップ
0 ボリュームダウン
* ボリュームアップ
/ ボリュームダウン
m ミュート 切替
s スクショ保存
L ループ再生
A アスペクト比率 強制切替
q 停止
Q 停止(再生位置を記憶しレジューム可能で終了)

詳しくは 公式サイト を参照

なお、このキーボードショートカットは、設定ファイルで更新可能である。

またLuaスクリプトなどで拡張可能らしい。

キーボードとリモコンの関連付け。

後は、HDMICEC機能を使って、リモコンのボタンとMPVのキーボードショート・カットを割り当ててしまえば

Omxplayer と同じようにリモコンから操作ができるはずである

SSH経由で再生が開始すれば、あとはTVリモコンから制御ができる。

TVリモコンで制御するほうが簡単である。CEC使えるならリモコンでRaspiとMpvを紐づけしてしおけば、録画ファイルも簡単に視聴できる。

Raspi4 で再生時のCPU使用率

hevc コーデックの動画を再生した場合の負荷を測定した。720p

mpv はraspi4 で 遅延なく低負荷で再生できていて嬉しい。

デコードを明示したときでも、CPUパワーはそこまで使わない。

明示したときでも mpv --hwdec=yes --hwdec-codecs=hevc_v4l2m2m

そんなに変換しない。メモリもそこまで使わない。

明示してもしなくてもCPU負荷が変わらないので、mpvでhevc を再生するときは、なにもしなくてもハードウェア・デコードが効くのかもしれない。

Raspi4でHEVCを再生してこのパフォーマンスであれば、全然有りである。

録画ファイルはHEVCにして容量を削減

TV録画のファイルは HEVC h265 にしてしまえば、h264 よりも容量を70%ほど削減できる。

そもそも、地上波なんてものは、720pでしかないしパラパラのスライドのような動画である。HEVCで容量削減しても情報量はさして変わらない。地デジはスポーツ番組ですらひどいエンコード画質なので、もともと画質良くないので、圧縮しても、地デジだしそんなものだろうという程度である。

Raspi4 でHEVCがリモート再生できるのであれば、もうこれで再生して地デジのアーカイブは圧縮してしまおうと思った。

omxplayer はhevc 未対応だったのでmpv にすることで録画ファイルの取り扱いが軽くなる。私が動画ファイルに求めるのは情報である。画質ではなく情報であるため、画質はそこまで求めないとすれば、mpv でH265再生でいい気がする。

その他の方法

今回の解決方法は、mpv にDISPLAY環境変数をつけるだけである。

DISPLAY=0

これだけで行けるために、VLCmplayerffmpeg (ffplay)でも同じように再生ができると思う。

https://zenn.dev/yakumo/articles/24eee761d4534ca79c5ffcd9882c57f1

ほかにも、ブラウザのキオスクモードで再生させるという手段も有り得る。動画の再生速度制御・ループ・プレイリスト対応を考えるとmpv でいい気がする。スライドを再生するよりファイルをURLで制御するほうがサイネージ的には使いやすいだろうしね。

ただ、まぁTV用リモコンからの制御も含めて考えると、やはり、mpv が望ましい。

raspi 以外でも

n97 / n100 のミニPCでも mpv が動けば、同じことができると思われる。

omxplayer は openmax で raspi 専用コマンドだったが、mpv であれば汎用性は高い。

tvservice コマンドがない。

最新版のRaspi用 Debian だと tvservice コマンドがない。

tvservice コマンドで割と便利に使っているのであるが。RaspbianがなくなってLegacyにされたので、通常のDebianには提供されないコマンドがいくつかある。そのひとつが、tvservice コマンド。

hdmi 出力をオフにする

vcgencmd display_power 0
vcgencmd display_power 1

まあCECHDMIモニタ自体をオフにしてもいいのですが。

cecコマンドの場合。

echo 'standby 0' | cec-client -s 
echo 'on 0' | cec-client -s 

関連資料

js で querySelector では取れない「コメント」ノードをを取得したい

js で querySelector では取れない「コメント」ノードをを取得したい。

スクレイピングしていると、データのIDが属性値になくコメントに入っている事があるので。

コメント・ノードを取得する

function getComments( node ) {
    var comments = [];
    var treeWalker = document.createTreeWalker(
        node,
        NodeFilter.SHOW_COMMENT,
        null,
        false
    );

    var currentNode = treeWalker.nextNode();
    while (currentNode) {
        comments.push(currentNode);
        currentNode = treeWalker.nextNode();
    }

    return comments;
}

ツリーの中をたどって指定したタイプのノードを取得する。今回は、コメントノードを取得する。

動かしてみる。

var e = list[0]
var commentNodes = getComments(e);
console.log(commentNodes);  // コメントノードのリストが表示されます

コメントの中身がほしいときは

コメント要素(ノード)それ自体を取得したい場面より、コメント本文を参照したい場面が多いと思うので。

getComments(e.querySelector('div'))[0].textContent.trim()

参考資料

MDN(https://developer.mozilla.org/en-US/docs/Web/API/Document/createTreeWalker)

hdparm で HGST だけがまともな値を返してくれる。

Seagate / WD / HGST の情報を見たとき

/dev/sdbHGSTなのですが。 APM に対応してて、Acousticに対応してるのはHGSTだった。

買うならHGSTのストレージですね。

ストレージも値段で選ぶなら、ちょっといいやつを買うほうが、細かい制御に対応してて良いのかもしれない。

DNS問い合わせは、また「監視される」。

DNS問い合わせ監視が有耶無耶の間に、既成事実化されつつある。

どこの◯ワンゴが仕掛けてるのか、と思うんだけど、「金盾」を日本に導入がなし崩し的に規定にされつつあります。

インフラ事業者や大学を国が守る、悪性サイトへの接続防ぐサービスを政府が無償提供

 政府は今夏にも、医療機関などの重要インフラ(社会基盤)事業者や大学・研究機関に対し、サイバーセキュリティーを強化するサービスの無償提供を始める。情報を抜き取るマルウェア(悪意のあるプログラム)などが仕込まれた悪性サイトへの接続を未然に防ぐ仕組みで、国民生活に直結するインフラを守る体制作りにつなげたい考えだ。

[]

 複数の政府関係者が明らかにした。内閣サイバーセキュリティセンター(NISC)は今年度予算に政府機関などのサイバーセキュリティー強化関連として49・3億円を計上しており、その具体策の一つとして実施する方針だ。

 それぞれの機関はサイバー攻撃への防御策を講じているが、政府がより能力の高いサービスを提供し、 脆弱(ぜいじゃく) 性が指摘される国内のサイバーセキュリティーの底上げを図る。対策を通じ、先端技術の外部流出を防ぐ狙いもある。

 提供するサービスは、米国や英国などで導入が進む「プロテクティブDNS(ドメイン・ネーム・システム)」だ。メールなどに届いたURLを通じ個人情報を抜き取るフィッシングサイトに誤って接続しようとすると、ブロックされたり、警告が発出されたりする。マルウェアが仕込まれた不審なファイルをダウンロードしようとすると、警告が表示される。

 サービスの提供先としては、機能不全になると国民生活への影響が甚大な医療や水道といったインフラ事業者や、先端技術研究を担う大学・研究機関、独立行政法人などを想定する。今後、内閣府文部科学省などの関係府省庁を通じて利用を呼びかける。サービス利用に伴い得られた悪性サイトの情報はNISCで蓄積して分析し、さらなる能力の向上にも役立てる。

 近年、医療機関や大学・研究機関へのサイバー攻撃は相次いでいる。3月には、鹿児島県の医療機関が攻撃を受け、診療の一部を制限する事態になった。政府は、先端技術に関する情報を盗むためのサイバー攻撃への警戒も強めており、新たな対策を講じる必要があると判断した。

防衛という「大義名分」を借りて、監視を強めようとする。

みんなDNSは自分でRoot Serverから名前解決をするべきだと思います。

もしくは信頼できるPublicDNSやプロバイダのDNSを使っていくべきだと思います。

それらを使った上で、「特定の名前解決」を誰に肩代わりしてもらってるのか、ちゃんと認識するべきだと思います。

憲法にか書かれているとおり、日本国憲法では政府が検閲をしたり通信を監視することはできないはずです。しかし「防衛」という大義名分から、蟻の一穴を開けられると、「監視を使ってない」ことを国民同士で誹謗して、最終的には監視を受け入れることになると思います。

どこの会社に委託するのですか。

そこそも、DNSの問い合わせのセキュリティチェックは、CloudflareやAdguardからあらゆる会社が提供している。政府はどこの企業に委託金を払って提供しているのか。

これって、利益誘導・・・・

委託先がトレン◯マイク◯とか、カスペル◯キーでないことを祈ります。

「合意を取るのが最低限」

企業であれ国の組織であれ、建前上でも「合意」を取るのが、最低限行われるべき合法施策だと思うのですよね。

従業員・組織の皆さんの通信は「こういう場面で監視する」とちゃんと契約書をとるのが、この国のかたちだとおもうのですが、みんなやらないよねぇ。

やらないと、黙って監視すればいいことになり良くないと思うし。

どういう場面でどういう脅威から防衛するのか、これを説明しないのは「セキュリティ教育」の観点からも不適切かなと思う。

以前の記事 に書いた通り

unboundでrootから引くdnsサーバを作り、DNSフィルタリングに備える - それマグで!

以前の記事にも書いた通り、徐々に徐々に包囲されて既成事実化しつつある状況はあまり良くないなと思う。そのうちに、自由なソフトウェアで自由に通信するだけで逮捕状が発行される状況になりかねない。

mac のタイムマシンって動作し過ぎじゃないですか??

mac のタイムマシンって動作し過ぎじゃないですか

ふと気づいたんですが、macのタイムラインってめっちゃ頻繁に起動しますね。

デフォルトは1時間に1回ですよね。 毎時間のように起動するのはちょっと無いわ。

(Catallinaなので古い情報ですが、Appleの設計思想がそうなってる。と知るにはこの画像が適切だと思った。)

RaspberryPのネットワーク、妙にがおそいときがあると思ったのはこのせいでした。

SMBを不使用時に、自動的に電源をオフにするようにSambaを構成したけど、何故か電源が入ってしまう。

なんでそんな事になってるのかと、見直したらタイムマシンがんガンガンにパケット送ってWOLしてしまうのが原因だった。

Sambaのバックアップに向いてないわこれ。帯域もめっちゃ食う

ネットワークだと1時間に一回って割と不便ですよね。

ローカルだけの構成ならローカルスナップショットで済むのだけど、SMBを保存先にすると、書き込みはかなりの頻度で行われる。

頻度を変える方法

昔は、Defaultsを書き換えできた。いまはSIPやCSPで保護されていて、何も書き込めない。ほんとうにMacOSは・・・

Defaultsに書き込みに行くソフトウェアTimeMachine Sscheduler は動かない。

TimeMachimeScheduler の設定

タイマー設定を変える。

そこで、代替手段になり得るのが、タイマーを使ってタイムマシンをOn/Offするソフトウェアである。

TimeMachineEditor (https://tclementdev.com/timemachineeditor/ )

ただし、この場合は、タイムマシンはOffで運用し、定期的タイマーでOnにすることで指定時間のバックアップを実現する。

そのため、通常タイムマシンとは異なる挙動になる。通常はスリープ状態でもタイムマシンは起動してバックアップを始めるが、そういう事が行われないので注意が必要だった。

最新版では解消される。

さすがに、Appleもまずいと思ったのか、最新版では任意のタイミングが標準機能で選べるようになった。

こういうAppleの設計思想を知ると、トラブルがおきたり苦情が来ないと対応しないというアップデート強制は割りと怖いんですよね。

cpu電源管理が面倒なので、powertop を自動的に実行する

CPUの電源管理設定を調べる。

cat でサクッと目見れる。

 cat /sys/class/scsi_host/host*/link_power_management_policy

https://wiki.archlinux.jp/index.php/%E9%9B%BB%E6%BA%90%E7%AE%A1%E7%90%86#SATA_Active_Link_Power_Management

## cpu の電源管理の設定を変える。

パワーマネジメントを変えることはそう難しくない

for i in  /sys/class/scsi_host/host* ; do 
    echo $i
    echo 'min_power' | sudo tee  $i/link_power_management_policy
done

ノートPCなら、min_powermed_power_with_dipm でいいかと思う。

面倒なので、powertop にやらせる。

このへんは powertop でチューニングされるはず

systemd サービスを作る

cat <<"EOS;" | sudo tee /etc//systemd/system/powertop.service

[Unit]
Description=Powertop tunings

[Service]
ExecStart=/usr/sbin/powertop --auto-tune
RemainAfterExit=false


[Install]
WantedBy=multi-user.target


EOS;

systemd のタイマーを作る。

cat << "EOS;" | sudo tee  /etc/./systemd/system/powertop.timer
[Unit]
Description=PowerTop auto tune

[Timer]
OnCalendar= daily
RandomizedDelaySec=3600
Unit = powertop.service

[Install]
WantedBy=default.target

EOS;

Serviceを有効にする。

sudo systemctl daemon-reload
sudo systemctl enable powertop.service
sudo systemctl start powertop.service

なぜこんなことをするのか

たまに、フルパワーでぶん回してベンチマークを取得たりするとき、元に戻し忘れる。

帰宅したときファンが轟音たててて、戻し忘れてたことを忘れるとかある。悲しい。

対応策は、あれこれあるけど、とりあえず、powertop にお任せ。

参考資料。

https://gist.github.com/shunirr/7510857

PowerShell で確認Y/Nをスキップする

Remove-Item で確認が出る。

例えば、Powershellレジストリを消そうとすると。

レジストリの削除

Remove-Item -LiteralPath 'HKLM:\SOFTWARE\Classes\Directory\background\shell\VSCode' 

確認が表示される。

If you continue, all children will be removed with the item. Are you sure you want to continue? [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):

確認無しで削除を実行

確認が表示されると自動化に困難なので、確認を出さない

Remove-Item -LiteralPath 'HKLM:\SOFTWARE\Classes\Directory\background\shell\VSCode'  -Confirm:$false  -Recurse -Force

コレで、確認無しで削除を実行できる。

-confirm:$falseで「無」確認で実行できる。

Bashなどのスクリプトにある「常にYESと答える。」、PowerShellは、Bashとは違い、「はじめから確認なし」になる。

参考資料

https://stackoverflow.com/questions/4753702/automatic-confirmation-of-deletion-in-powershell

.bat ファイルをVsCodeで編集する関連付け

.bat ファイルの右クリックメニューを追加する。

Editで開くと、メモ帳になって不便なので、適当なエディタ(今回はVsCode)で開くようにした。

.bat ファイルのコンテキストメニューについての留意点

.bat ファイルのメニューを操作する前に知っておくべきこと。

いくつかの注意点があるので、備忘録として残しておく。

HKCU:\SOFTWARE\Classes\batfile を触る。

.bat ファイルは、拡張子.bat だが、レジストリではbatfile として登録されている。

拡張子で触るのではなく、batfile のエントリを触る。そして可能な限りHKCUで触る。

OpenWith系やダブルクリックは使用不可

OpenWith やOpenなどのdefault挙動を変えてはいけない。なぜなら、.batファイルをダブルクリックでコマンドとして実行する必要がある。そのため、標準の挙動を変えると起動するべき.batファイルが起動せずに、おかしなことになる。

もちろん、現代に於いて、.batファイルを利用したソフトウェアを標準配布するなど皆無に等しいため、変えても構わないはずだが、WindowsではOpenWithProgidを指定しても、OpenWithを変えることが出来ない。制限事項である。

.regファイルや.exeファイルとの比較

.batと似たようなシステムファイルの例として、regfile(レジストリ・ファイル)がある。

レジストリファイル(.reg)の場合は、OpenWithが利用可能である。

なぜなら、.regファイルを実行(登録)するには、regedit.exeを通すので、実行するexeを指定できる。

ところが、.batファイルは「ファイル自身」が実行対象になるため、OpenWithするexeがないことになる。

cmd.exeで開けばいいとか、persiste handler を変えたり、open を変えれば不可能ではないが、やるべきではない。

batfile ファイル形式は、次のように自分自身を実行するようにopen で定義されている・

batfile の定義(自分自身が実行対象)

%1 %* となり自分自身が実行対象であることがわかる。

コレは、.exeのexefile と同じ定義である。

exefile の定義(自分自身が実行対象)

bat と同じ定義である

このようなことから、OpenWith(関連付けの変更可能ファイル)として設定することは無意味であるし、するべきではない。

shell / shellex を通して、メニューを追加するに留めるわけです。

エントリの追加

上記を踏まえた上で、エントリを追加する。

## vs code 開くに追加
## .bat
New-Item -Path 'HKCU:\SOFTWARE\Classes\batfile' -ItemType Directory 
New-Item -Path 'HKCU:\SOFTWARE\Classes\batfile\shell' -ItemType Directory 
New-Item -Path 'HKCU:\SOFTWARE\Classes\batfile\shell\VSCode' -ItemType Directory 
New-Item -Path 'HKCU:\SOFTWARE\Classes\batfile\shell\VSCode\command' -ItemType Directory 
New-ItemProperty -Path 'HKCU:\SOFTWARE\Classes\batfile\shell\VSCode' -Name 'Icon' -Value "C:\Users\takuya\AppData\Local\Programs\Microsoft VS Code\Code.exe"
New-ItemProperty -Path 'HKCU:\SOFTWARE\Classes\batfile\shell\VSCode\command' -Name '(Default)' -Value '"C:\Users\takuya\AppData\Local\Programs\Microsoft VS Code\Code.exe" "%1"'

icon について

icon を入れると次のように、コンテキスト・メニュにアイコンが見える

vscode のインストール場所に注意

Vscode はユーザ空間と、システム全体(グローバル)のどちらかにインストールされるが、基本的にはユーザ空間である。 まれにシステム全体になっていることがあるので注意する。

まとめ

BATファイルは、右クリックメニューのShell(またはShellEx)でメニューを登録するしか無い。

.batのOpenWithを使うと標準起動が変わってしまうので、OpenWithは使うべきではないし、使えない。

cygwin 環境の構築 をする

cygwin 環境の構築

wsl v2 がWindowsへのアクセスが遅すぎる。また、WSLは権限がめんどくさい。

そこで、古き佳きCygwinの世界に舞い戻ることにする。

msys/ mingw でもいいし、git-windows で git-bash(mingw) を使ってもいいのだが、パッケージのインストールをしようとすると、cygwinがやっぱり便利である。

cygwin をインストール

choco install cygwin 

apt-cyg をインストール

curl -LJ rawgit.com/transcode-open/apt-cyg/master/apt-cyg -O /bin/apt-cyg 
lynx -source awgit.com/transcode-open/apt-cyg/master/apt-cyg > apt-cyg
install apt-cyg /bin

あとは適当に使う。

git-bash は msys なんでパッケージ追加がめんどうだし、やっぱりcygwin でいいや。

cygwin でパッケージインストールをコマンドで

cygwin でパッケージインストール

.\cygwinsetup.exe --no-shortcuts --no-admin -q -P curl

apt-cyg を使えばいいのだが。apt-cyg自体をインストールするのにコマンドのインストールが必要だし、cygwinsetup.exe だけでパッケージをインストールができるのであれば、コレでも十分に間に合う。

WindowsターミナルでCygwinのタブを作る

Windows ターミナルでCygwinを使いたい。

最短の方法(WSL内からCygwinへ切り替え)

WSL やCmd.exeから次のコマンドを打ち込めば、簡単にCygwin環境に入れる。

wsl から

/mnt/c/tools/cygwin/bin/bash.exe /bin/xhere /bin/bash ~

cmd.exe / powershell.exe からbatを実行

C:\tools\cygwin\Cygwin.bat

既存のターミナルが切り替わる。

私は、C:\tools\cygwin\ がインストール先なのでbashをそこから起動している。

Windows ターミナルにプロファイルを作る(chere利用)

こっちが王道の解決方法。ターミナルにプロファイルを作ってそこから、起動する。

ただし、今回は chere ( open cygwin here ) を活用して起動する。

なくても可能です(後述)

cygwin / xhere を準備

xhere は chere パッケージに含まれるので

.\cygwinsetup.exe --no-shortcuts --no-admin -q -P chere

コマンドからサクッとパッケージを突っ込めばいい。

ターミナルを設定する場合

次の画面のように、プロファイルを設定する

JSONにプロファイルを直接指定

JSON を直接触るなら、

.profiles.list[] に次のエントリを追加する。

{
    "guid": "{xxxx-xxxx-xxxx}",
    "name": "Cygwin",
    "suppressApplicationTitle": true,
    "commandline": "C:\\tools\\cygwin\\bin\\bash.exe /bin/xhere /bin/bash ~",
    "icon": "C:\\tools\\cygwin\\Cygwin-Terminal.ico",
    "useAcrylic" : true,
    "acrylicOpacity" : 0.6
}

guid は各自で新規作成する。

PS >  [guid]::NewGuid()

chere を使わない場合

chere を使わない場合は、初期ディレクトリを指定しつつ、bashを指定すればいい。

bash.exeを指定しただけ(うまくいかない)

ただし上記の場合は、環境変数が引き継がれず、lsコマンドすら機能しないので、bash の引数などをうまく調整する必要がある。

Cygwin.batを指定する。

Cygwin.bat を指定すればいい。

Windows TerminalでCygwinが起動して嬉しい

便利

更に、Cygwinのショートカットをmintty から windows ターミナルに変えてもいいかもしれない。

まぁそこまでする必要もないか

まとめ

cygwin.batを使えばいいが、WSL内部からだとちょっと面倒くさい。

今回は、WSL内部からCygwin.batを起動出来ないので、xhere コマンドを経由してWSLからでも行えるようにした。そのためprofile からもxhere を使って指定している。

WSLv1 の未来は暗い。

私は、純粋なLinuxがほしいのでなく、WindowsLinuxコマンドで操作したいので、基本的にCygwinで事足りるのだが、WSLv1でも同じことができるので、WSLv1を愛用している。

純粋なLinuxがほしければ、2万出せばMiniPCが買えるし、Raspi4もあるので特に困らない。Hyper-VでわざわざLinux仮想マシンにしてそこからネットワーク経由でWindowsを操作するのはなにか違うと思ってるが、MSは確実性をとってWSLv2にシフトしているし、Hyper-Vを使ってすべてのマシンが仮想環境で並列に動くようになっている。

ほしいのは、Powershell以外のコマンド体系。VimAwkwindowsのファイルを弄ったり、SCPで転送したりしたいわけで、Linux自体がほしいわけじゃない。その欲求を満たしてくれるWSLv1 が今後ずっと使えることはなさそうです。素直にPowershellを覚えるか、Cygwin使って事らしいです。

そのために、CygwinやMSYSをWindowsターミナルでも使えるように準備をしておいた。

WSLv2を使うのであれば、Hyper-VUbuntuいれてMutipassで管理するんだよなぁ。

参考資料

https://qiita.com/yokra9/items/e8b184021091dbabb8a1

windows で arp テーブルを追加削除する。ダイナミックをスタティックにする。

windowsARPを弄りたいと思ったので調べた。

以下はUACのエレベーションが必要なコマンドとなる。

arp をスタティックにしたい

arp をダイナミックから、スタティックに変えたい。

arp -d 192.168.1.7
arp -s 192.168.1.7 70-85-c2-xx-cf-xx

arp エントリを削除したい

削除する

arp -d 192.168.1.10

arp エントリを追加したい(スタティック)

既存エントリがなければ追加される。

arp -s 192.168.1.10  MA-C0-AD-DR-ES-SS

arp エントリを追加したい(ダイナミック)

ダイナミックはその名の通り、動的に追加されるのでLAN内部にブロードキャストして、応答をもらう方法しか無いと思う

ping 192.168.1.10

wake on LAN で使う

ARP管理なんて何に使うの?と思うかもしれないが、WOLWake On Lanするときに、応答しないホストに対して、パケットを流したいときに使う。

最近のWindowsと一般的なPCはSSH接続やSMB接続をすれば、WOLするので、簡単に起こせる。

windows 7 バックアップをコマンドから起動する

windows 7のバックアップ

設定にはリンクだけが存在する

コントロールパネルにはWin7スタイルのバックアップが存在する。

この機能をコマンドから起動したい。

wbadmin コマンドでバックアップを取る

wdadmin は windows backup admin の略だと思う

バックアップを取る例

ネットワーク先にすべてのバックアップを取る。

wbadmin start backup -backupTarget:\\192.168.12.7\backup -include:C: -allCritical  -quiet

ドライブを指定する場合

wbadmin start backup -backupTarget:X:-include:C: -allCritical  -quiet

ネットワーク先にパスワードを指定する

wbadmin start backup -backupTarget:\\192.168.12.7\backup -include:C: -allCritical -user:YourUsername -password:YourPassword -quiet

ただし、パスワードを平文で書いたら、管理が面倒くさいので、Windows Credential Manager (windows 資格情報管理)を使って事前に保存するのがよい

または、先に、net use コマンドで接続しておく

net use コマンドで接続後にバックアップ

net use \\192.168.12.7\backup
wbadmin  start backup -backupTarget:\\192.168.12.7\backup -include:C: -allCritical  -quiet 
net use /delete * 

net use コマンドでドライブを割り当ててバックアップ

net use Z: \\192.168.12.7\backup
wbadmin  start backup -backupTarget:Z:\ -include:C: -allCritical  -quiet 
net use /delete * 

Wbadmin の利点

wbadmin でバックアップを取ると嬉しい。

進捗がリアルタイムでわかる。

コントロールパネルの画面を使わなくても進捗がリアルタイムで把握できる。

ほかにも次のような利点が生まれる。

コマンドならではのメリットを得られる。

rsync よりもいい

Rsync などと違い、ファイルをロックしない(スナップショット利用する)ので、作業を妨害しない。

先程のスクリーンショットを見ればわかるが、シャドウコピー(スナップショット)を準備してからバックアップしているのがわかる。スナップショットを経由するので、バックアップ中にファイルが書き換わってもスナップショットがあるためバックアップ開始時点のファイルがバックアップされている。

ssh で外マシンから起動できる

SSH経由で起動できる。sshWindowsに入って起動すればいい

処理をバッチ化しやすい

バックアップ前後に処理を挟める(net use の例でわかる)

まとめ

wbadmin でコマンドを使ったバックアップのほうが圧倒的に使いやすいと分る、

windows バックアップの変遷

いまのWindows10・11は本当にカオスで

  • win7 時代のバックアップツール
    • ファイル履歴(バックアップ)ツール
    • システムイメージ作成(バックアップ)ツール
    • リカバリメディア作成ツール(WinRE)
  • Win10 時代のバックアップツール
    • 設定ー>バックアップー>ファイル履歴(中身はWin7のファイル履歴と同じ)
    • OneDrive バックアップ(ファイル履歴)
  • win11 時代のバックアップ
    • Windows Backup(ウインドウズ・バックアップ MSアカウント紐づけ とこのような変遷をたどっているようですね。

windows バックアップ

これは、Win10/11に搭載されているWindows Backup

一見するとちゃんと動きそうですが。

MS アカウントが必要です。

Windows自体をログインしないと動きません

しかも、システム全体のバックアップを取ってくれません。

しかも、預けた内容はWEBで見られます。暗号化の解除キーもMSに取られているのです。

これはポエム

これは完全にポエムなのですが。

クラウドストレージは「もはや安全ではありません」

Google関連社がYouTubeの管理者権限で未公開動画にアクセスして事前に情報を流出させていたと判明、任天堂や著名人が被害に

https://gigazine.net/news/20240604-google-leak-youtube-nintendo-private-movies/ (原題は社員ですが、委託先が正しいので変更)

このように、クラウドストレージは「見られている」と思って行動するべきです。そもそゼロトラストセキュリティってそうですよね。暗号化と証明書以外を信じないのです。

他にも法律や行政によってその中身を暴露させられる危険性があります。

クラウドストレージは技術的には安全性を確保しているが、社員の好奇心や法律によって中身が暴露させる危険性は非常に高いのです。とくにUSAですらこうなのです。USSRの後継国や解放軍の国などは、諦めるしかありません。日本だって警察は令状を裁判所から好き勝手にもらえる現状です。

Bitlockerによる暗号化ドライブがWindowsで一般的になって、iOSがすべてを暗号化した現代において、PC・スマホ本体を押収後にデータ回収が困難です。デジタルフォレンジックといえども容易に閲覧できません。脆弱性を突くような、強引な調査が「法的な証拠能力を持つ」なのか、今後の判決が待たれます。

面倒を避けたいので、そのため、捜査機関は本人による解錠を迫っています。もしそれも拒否した場合は証拠隠滅に関する罪に問われることもありますが、今後はクラウドストレージ業者へ捜査機関への情報提供が行われるでしょう。そして、暗号化禁止が立法府で議論されることでしょう。

そういうことから、本人の意思とは無関係に、クラウドデータは漏洩されます。本人の許諾なく、捜査機関に提供(漏洩)する懸念が強く出てきました。政治権力や裁判所によってクラウドストレージは暴露させられる時代になりました。

ましてやGoogleiCloudのように、クラウドストレージ事業者が令状によりデータを漏洩(提供)する事例も多数出てきました。

技術的には安全なクラウド・バックアップであったとしても、司法の要請や世間の声の前には鍵を預けた状態の暗号化など無力です。

そのような時代を目前にして、「クラウド・バックアップ」なんて代物を平気で使うのはどうかと思います。Appleのように政府とすら対決する姿勢を示していても犯罪者のデータ(iMessageログなど)は政府に公開していますよね。ましてやGoogleMicrosoftクラウド・バックアップを信用するなんてもっとありえないことではありませんかね。

「やましいことがない」といっても、もし誤認逮捕を受けて痛くもない腹を探られる。「私の無実を証明するのは、私の責任なのです。」

ビットコインのマイニングの逮捕や無限ループでの逮捕事件、遠隔操作の誤認逮捕など捜査機関のサイバー犯罪の取り締まりは、やばい失敗続きです、今後もますますひどくなっていくことと思われます。

クラウド・バックアップを使わない。それだけで安全・安心できるのなら500GBのSSDの3千円程度など、本当に安いものです。

っていうか、クラウド・バックアップを契約するくらいなら、SSD買ってBitlockerでぶっ刺してるほうが安全かつ安価なのだから。

バックアップは手元に持っておくしか方法はないでしょう。クラウドストレージに預ける前に、暗号化してからクラウド保存しかないでしょう。この点においてMSが中身を閲覧できるWindowsBackupは「危険」なのです。