SSブログ

覚え書き:Windows TerminalからのUbuntu直接続 [WSL]

単に... プルダウンメニューで「設定」を選んで、左ペインのメニューから「+ 新しいプロファイルを追加します」で、「Ubuntu」選択して「複製」します。
コマンドラインを編集して
wsl.exe -d Ubuntu --cd ~
として、「保存」します。
デフォルトの名前で保存すれば「Ubuntu (コピー)」がセレクト出来るはずで、これをセレクトすれば、うざいメッセージは出ません。

書きとめておかないと忘れそう...
nice!(16)  コメント(0) 
共通テーマ:パソコン・インターネット

Windowsコマンドライン・エイリアス [WSL]

プログラムをバリバリ書いて、いじってた頃は、エディターはEmacs、Shellはtcshで... って感じでしたが、開発環境屋になってからはrootでの仕事が多かったので、どこでも使えるviにBourne shell...みたいになって、何もカスタマイズしないようになってしまいました。

UNIX/Linux環境ともおさらばして、Windowsベースになっても、このこだわりの無さは変わらず(^^;
唯一拘っているのは英語配列のキーボードですかね...
これだけはタイピング速度にもろに影響するので。計測したことは無いですが、それなりに早いです。

で、そんな私が、wslまわりで、久々にエイリアスでも... とか思いました。
単に、
<3>WSL (300) ERROR: CreateProcessParseCommon:782: Failed to translate C:\Users\ユーザー名
を消したいだけなんですが(^^;

■コマンドプロンプト編
doskeyコマンドですか... MS-DOS 6.xあたりから?大学の研究室にいた頃は使ってた様な気もするけど、そのころはASCIIのMS-DOSコマンドツール群にお世話になってましたね...
私がUNIXのコマンド群に憧れ、慣れ親しむ環境でございました。
あ、脱線してしまった。
> doskey wsl=wsl --cd ~ $1 $2 $3 $4 $5 $6 $7 $8 $9
ぐらいでいいですかね。
引数を9個も書くことはないと思いますが。
こうしておけば、単に"wsl"と叩いてwslに入ったとしても、いらんメッセージは出てきません。
"-l -v"みたいな引数も渡せますし、普通にwslコマンドを使う分には、オプションの"--cd ~"があることを気にしなくて良いですね。ちなみにオプション後勝ちなので"--cd /"とかすれば、login後のディレクトリが"/"になります。

問題は、どうやってこれを毎回設定するか...
昔はautoexec.batとかありましたね~
まずは、ユーザーのホームディレクトリ?というのかDesktopの親ディレクトリ、すなわち%UserProfile%で...
> doskey /macro > .cmdrc
して書きだして...
Windows Terminalのプルダウンメニューで「設定」を選んで、左ペインのメニューから「+ 新しいプロファイルを追加します」で、「コマンド プロンプト」選択して「複製」します。
コマンドラインを編集して
%SystemRoot%\System32\cmd.exe /k "doskey /macrofile=%UserProfile%\.cmdrc"
として、「保存」します。
デフォルトの名前で保存すれば「コマンド プロンプト(コピー)」がセレクト出来るはずで、これをセレクトすれば、めでたくマクロが登録された状態でコマンドプロンプトが実行されます。

■PowerShell編
にたようなもんでもなかった...
えーと
https://learn.microsoft.com/ja-jp/powershell/scripting/learn/shell/creating-profiles?view=powershell-7.3
こちらを参照します。
if (!(Test-Path -Path $PROFILE)) {
  New-Item -ItemType File -Path $PROFILE -Force
}
これを貼り付けて実行すると、USERPROFILEディレクトリの下のDocuments以下になにやらPowerShellのディレクトリが作られて、ファイルが作成されるようです。
そんでもって
notepad $PROFILE
でプロファイルを開けば、まっさらな状態。
ここに...
function wsl(){
  wsl.exe --cd ~ $args
}
とか書いておけば、次にPowerShellを実行するときに勝手に読み込んでくれるっぽい。ちょっと納得いかない妥協をしてるんですが、まあ、これでいいや。
nice!(16)  コメント(0) 
共通テーマ:パソコン・インターネット

WSL v1.0.0でUbuntu 22.04LTS: その3 [WSL]

<3>WSL (300) ERROR: CreateProcessParseCommon:782: Failed to translate C:\Users\ユーザー名
の対応は、workaroundが見えたので、一旦保留。

そんな訳でSSHの設定へ。
とはいえ、ちょっと寄り道。
$ sudo apt install net-tools
$ sudo apt install manpages*
$ sudo mandb
レガシーな人間にとってはこの辺はデフォルトで入ってて欲しいなぁ...

ここからSSHの設定。
$ sudo ssh-kegen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): ←ここはデフォルトでイイか
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): ←パスフレーズ
Enter same passphrase again: ←もう一回同じパスフレーズ
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX root@hostname
The key's randomart image is:
+---[RSA 3072]----+
| XXXXXXXXXXXXXXX |
| XXXXXXXXXXXXXXX |
| XXXXXXXXXXXXXXX |
| XXXXXXXXXXXXXXX |
| XXXXXXXXXXXXXXX |
| XXXXXXXXXXXXXXX |
| XXXXXXXXXXXXXXX |
| XXXXXXXXXXXXXXX |
| XXXXXXXXXXXXXXX |
+----[SHA256]-----+
な感じで実行。
このあと/etc/ssh/sshd_configの中のPasswordAuthenticationをyesに変更... って思ったら入ってないのね...
$ sudo apt install openssh-server
ですな。
これで/etc/ssh/sshd_configも生成されるので修正。
そんでもって起動。
$ sudo service ssh start
これでTeraTerm等でlocalhostにつなぎに行くことが出来るようになります。
まあココまではinbox版でやって来たことそのもの。
で、ここからがsystemdが動くWSL v1.0.0だからこその設定!
って思ったら...
$ systemctl is-enabled ssh
enabled
ってことで、enableになってました。
じゃあ、シャットダウンしてみましょう。
rebootコマンドで、勝手に立ち上がってくれると有り難いんですが、そうはいかないので、再立ち上げはwslコマンドを叩く必要があります... イケてない...
> wsl -l -v
  NAME      STATE           VERSION
* Ubuntu    Stopped         2
こうなっているのを確認したら
> Start-Process -FilePath wsl -ArgumentList "--cd ~" -WindowStyle Hidden
と叩きます。
まあwslと叩いてもイイですが... 一旦、Ubuntuのshellに入るのもね...
これで裏で起動してくれるのでSSHで繋ぎに行けます。

めでたしめでたし:-)
nice!(9)  コメント(0) 
共通テーマ:パソコン・インターネット

WSL v1.0.0でUbuntu 22.04LTS: その2 [WSL]

login時のうざいエラーを黙らせるというのをやります。
<3>WSL (305) ERROR: CreateProcessParseCommon:782: Failed to translate C:\Users\ユーザー名
<3>WSL (305) ERROR: UtilTranslatePathList:2671: Failed to translate C:\WINDOWS\System32\Wbem
<3>WSL (305) ERROR: UtilTranslatePathList:2671: Failed to translate C:\WINDOWS\System32\WindowsPowerShell\v1.0\
<3>WSL (305) ERROR: UtilTranslatePathList:2671: Failed to translate C:\WINDOWS\System32\OpenSSH\
<3>WSL (305) ERROR: UtilTranslatePathList:2671: Failed to translate C:\Program Files\dotnet\
<3>WSL (305) ERROR: UtilTranslatePathList:2671: Failed to translate C:\Program Files (x86)\Common Files\Sony Shared\FeliCaLibrary
<3>WSL (305) ERROR: UtilTranslatePathList:2671: Failed to translate C:\Program Files\Common Files\Sony Shared\FeliCaLibrary
<3>WSL (305) ERROR: UtilTranslatePathList:2671: Failed to translate C:\Program Files (x86)\Common Files\Sony Shared\FeliCaNFCLibrary
<3>WSL (305) ERROR: UtilTranslatePathList:2671: Failed to translate C:\Program Files\Common Files\Sony Shared\FeliCaNFCLibrary
<3>WSL (305) ERROR: UtilTranslatePathList:2671: Failed to translate C:\Program Files (x86)\JustSystems\JSLIB32
<3>WSL (305) ERROR: UtilTranslatePathList:2671: Failed to translate C:\PROGRA~1\JPKI
<3>WSL (305) ERROR: UtilTranslatePathList:2671: Failed to translate C:\Users\ユーザー名\AppData\Local\Microsoft\WindowsApps
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.74.2-microsoft-standard-WSL2 x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage


This message is shown once a day. To disable it please create the
/home/ubuntu/.hushlogin file.
毎回うざいよね...
/etc/wsl.confに
[automount]
enabled = false
って書いたのが、これの始まりですが...

https://github.com/microsoft/WSL/issues/8723
この辺眺めていると、/etc/wsl.confに
[interop]
appendWindowsPath = false
って書くと消えそうです。
書いたらsystemdが動いているならreboot(実はshutdown)でもshutdownでもイイですが、wslから抜けて、外からwsl -l -vでステータスがStoppedになってから、もう一度wslに入ります。
すると...
<3>WSL (300) ERROR: CreateProcessParseCommon:782: Failed to translate C:\Users\ユーザー名
まで減ります。

うーん、ここで行き詰まった...

おまけ
/etc/wsl.confの内容については
https://learn.microsoft.com/ja-jp/windows/wsl/wsl-config
ここ。

さらにおまけ
Windowsから
wsl --cd ~
で入ると、エラーが出ない...
initの中で出しているエラーと言うことまでは突き止めたんだけど、うーむ。

nice!(11)  コメント(0) 
共通テーマ:パソコン・インターネット

WSL v1.0.0でUbuntu 22.04LTS: その1 [WSL]

今頃気が付いたけど、スタートメニューやWindowsターミナルのタブメニューから起動すると、
/home/ユーザー名
が初期ディレクトリーになるけど、Power Shellからwslコマンドを叩いて入ると
/mnt/ドライブ名/Windows側のCurrent directory
が初期ディレクトリーになるのね...
まあauto mountしてくれるのは便利だけど、元UNIX使いとしては、なんじゃこりゃ?仕様だな...

さて、Intel Teamingが使えなくなっちゃったうちのネットワーク環境は、現在Dual home gateway状態でして、2口ある10Gbeの片方は、Windows host用。もう片方はIPを割り当てずにHyper-Vの外部通信用にVirtual Switchを割り当てています。
これ以外にHyper-VでDefault Switchが内部通信向けに作られています。これは、コントロールパネルのネットワーク接続には出てこないんですよね。
そんでもってWSLをインストールすると、もう一つWSL用のVirtual Switchが作られます。これもコントロールパネルのネットワーク接続には出てこないんですな。

こんな環境の所為なのか、インストールしたばっかの環境では
$ dig www.so-net.ne.jp

; <<>> DiG 9.18.1-1ubuntu1.2-Ubuntu <<>> www.so-net.ne.jp
;; global options: +cmd
;; connection timed out; no servers could be reached
つれない返事ですこと...

えーとですね、どうやら
https://stackoverflow.com/questions/57633406/unable-to-access-network-from-wsl2
ここに答えが...

なんか/etc/resolv.confが毎回作られるみたい。
でもって/etc/wsl.confになんか書いて、/etc/resolv.confは自分でアドレス固定しろと。

それからautomountの記述もあるからenabled=falseとしておけば、勝手にWindows側をマウントすることもなさそう。

そもそも、今回入れ替えたのは正式版になったからと言うより、今だにStore版じゃ無いとsystemdがサポートされないから、そいつもせっていしてしまえー
ということで、以下のような/etc/wsl.confを作成します:-)
[network]
generateResolvConf = false

[automount]
enabled = false

[boot]
systemd = true
これで一度wslから抜けて、インスタンスをshutodownした後、再度起動します。
そうするとですね...
<3>WSL (478) ERROR: UtilTranslatePathList:2671: Failed to translate C:\WINDOWS\system32
<3>WSL (478) ERROR: UtilTranslatePathList:2671: Failed to translate C:\WINDOWS
......................
なんてエラーを出してくれますが、一旦無視しましょう。
なにかautomountが動かないと困る事があるのかもしれないので、後で調べます。
この状態であれば、Power Shellでwslと叩いて入っても、キチンとhome directoryに入ってくれます:-)

それと/etc/resolv.confは生成されなくなるので、作ります。
nameserver おうちで参照するnameserver address
ってな感じで書いておけばいいです。
これでlookup出来るようになります(^^)v
そしたらおもむろに
$ sudo apt update
$ sudo apt upgrade
しましょう。
rebootを要求するupdateもあるので、exitしてshutdownして入り直しましょう。
というかsystemdが動くとrebootもshutodownも出来るんだな!
すばらしい!

ということで、次回はもう一度ssh接続の設定をしますかね。

nice!(20)  コメント(0) 
共通テーマ:パソコン・インターネット

Microsoft Store版WSL v1.0.0導入 [WSL]

システム組み込みのものより先にWindows Store版のWSLがv1.0.0になった
https://forest.watch.impress.co.jp/docs/news/1456259.html
と言うことで、入れ替えてみました。

とりあえず、インストールすると
> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-22.04    Stopped         2
となって、最新の22.04LTSベースのものがセットアップされるようです。えーと、Windows拡張機能版でインストールしてあった22.04LTSをunregisterしないまま入れ替えたので、そのイメージが参照されちゃってたようです(^^;
wsl -unregister Ubuntu-22.04
して、消した後に
wsl --list --online
して利用可能なディストリビューションを表示させて必要なものをインストールします。
この記事を書いている時点では一番上に出てくる"Ubuntu"を選択すると、22.04LTSのようです。
インストールは...
> wsl --Install Ubuntu
インストール中: Ubuntu
Ubuntu はインストールされました。
Ubuntu を開始しています...
こんな感じで、新しいWindowが開いて、新しいユーザーアカウントの登録を聞いてきます。

今回はここまで。
うちの、変態環境だとこのままだとupdateも出来ないので、次回はその辺を。
nice!(22)  コメント(0) 
共通テーマ:パソコン・インターネット