普段遣いにはWindowsの方が便利。
開発にはLinuxの方が便利。
WSLを使う方法がモダンな方法だが、開発の時はUIもLinux用のデスクトップ環境(DE)の方が便利だと思う。
私のWindows ProでHyper-Vが使えるのでこれを十分に活かして最高に便利な環境を作る。
細かい設定は覚えられないので、ここに記録として残す。
Hyper-V周りの設定
Hyper-Vの設定
個人的にHyper-V関連のファイルはC以外のドライブに保存させたいので移動させる。
Hyper-Vの設定 > 仮想ハードディスク
を任意の場所に変える
e.g.) D:\Hyper-V\Virtual Hard Disks
Hyper-Vの設定 > 仮想マシン
を任意の場所に変える
e.g.) D:\Hyper-V
仮想スイッチの設定
外部との通信はDefault Switch
をそのまま使う。
仮想マシンとホストマシンでファイル共有を簡単にするために固定IPを割振るためのスイッチを1つ作る。
仮想スイッチ マネージャー > 新しい仮想ネットワーク スイッチ > 内部 > 新規スイッチの作成
内部スイッチのIPを固定する
Windowsのバージョンによって操作が変わると思う。ここではWindows11について述べる。
設定 > ネットワークとインターネット > ネットワークの詳細設定 > vEthernet (作成した内部スイッチの名前) > 追加のプロパティを表示 > 編集
から以下のような値に変更する。
手動 IPv4: オン IPアドレス: 172.16.0.2 サブネットマスク: 255.255.255.0 ゲートウェイ: 172.16.0.1 優先DNS: 172.16.0.1 IPv6: オフ
IPv6まで考えるのは面倒なのでオフにする。
どうせPC内のファイル共有にしか使わないのでv4もv6も変わらないだろう。
仮想マシンの作成
新規 > 仮想マシン
から仮想マシンを作成する
新規作成ウィザードは以下のように設定する
名前と場所の指定 名前: 適当な名前(今回はmanjaro) 仮想マシンを別の場所に格納する: チェック
仮想マシンを別の場所に格納するにチェックを入れるとHyper-Vの設定で指定したディレクトリに仮想マシンの名前のフォルダが作成されその中に仮想マシンのファイルが保存される。パスは弄らなくて良い。
世代の指定 第2世代
ネットワークの構成 接続: Default Switch
後で追加できるが一応ここでメインの方を付けておく。
インストールオプション ブートイメージ~~~: Linuxのインストールメディアを指定する
上記に無いウィザードの項目はデフォルトのまま次へを押す。
仮想マシンの設定
仮想マシンを起動する前に追加設定をする。
セキュリティ
設定 > セキュリティ > セキュアブート
のセキュアブートを有効にするのチェックを外す。
また、TPMを使いたい場合は一旦TPMもオフにしておいた方が良い。
暗号化のサポート > トラステッドプラットフォームモジュールを有効にする
のチェックを外す。
ここの設定項目は正式名称じゃなくTPMとしたほうがわかりやすくなると思うのは私だけだろうか?
ハードウェアの追加
設定 > ハードウェアの追加 > ネットワークアダプター > 追加
その後追加されたネットワークアダプタの設定で作成した内部スイッチ
を指定する。
この段階でDVDドライブがハードウェアの一覧に存在していない場合は追加しておく。
SCSI コントローラー > DVD ドライブ > 追加
また、インストールメディアを指定していない場合もここで指定する。
DVD ドライブ > メディア > イメージファイル > Linuxのインストールメディアを指定
チェックポイント
気にしなくても良いが自動チェックポイントを使用する
のチェックを外しておいたほうが良い。
Linuxのインストール
どのディストリビューションでも大差ないが、Manjaroをインストールするとして話を進める。
大した設定は必要なく、基本的に画面の指示に従って進めれば良い。
Linuxでセキュアブートを簡単にするためにESPを1024MBにする。
1GBという数字には何も根拠は無い。最終的にここにブートローダーとカーネルをすべて詰め込むので、小さすぎなければ良い。
初学者のために設定方法を少し詳しく書いておく。
GUIのインストーラーを使っているとディスクの設定の手順が出てくると思う。
まずは、そこで手動で設定するという内容の項目を選ぶ。
次にパーティションテーブルを作成すると言った内容のボタンが有るはずなので押し、GPTを選ぶ。
これでパーティションを作れるようになるので、ディスクの空のところをクリックして選択状態にし、新規とか作成とか書かれているボタンを押す。
容量: 1024M
フォーマット: Fat32
or vFat
or efi
(ディストリビューションによって表示名が違うのでよしなに選ぶ)
マウントポイント: /boot/efi
フラッグ: boot
or ESP
or efi
(ディストリビューションによって表示名が違うのでよしなに選ぶ)
上記設定で1つ目のパーティションを作成する。このパーティションがいわゆるESP(Efi System Partition)となる。
同様の手順で2つ目のパーティションを作る。
容量: 残り全部
フォーマット: ext4
or xfs
or btrfs
(好きなものを選ぶ。初学者はext4が無難)
マウントポイント: /
フラッグ: なし(なしで良いはず。警告が出たりインストールに失敗したりした場合はROOTを選ぶ。)
あとは画面の指示に従ってインストールを進める。
インストール完了後は一旦シャットダウン、インストールメディアの割当解除し、チェックポイントを作成しておく。
仮想マシンの設定
自動ログインの設定
毎回ログインするの面倒なので自動ログインを設定する。
LightDMの場合
/etc/lightdm/lightdm.conf
に次の設定をする。
[Seat:*] autologin-user=username autologin-session=session
username
とsession
には自分が使うユーザー名とDE名を入れる。
そして以下のコマンドでautologin
グループを作成し、自分を追加する。
sudo groupadd -r autologin sudo gpasswd -a $USER autologin
一旦再起動して自動ログインできるか確認する。
X11 fowarding
ホストマシンをホスト名で指定できるようにする
ホスト側をipアドレスで指定しても良いがDHCP環境だと変わったりするので、ホスト名で指定できるようにする。
manjaroはavahi
がデフォルトで入っているのでそのまま設定をする。
/etc/nsswitch.conf
を次のように設定する。
hosts: ~~~ mdns_minimal [NOTFOUND=return] ~~~resolve ~~~ dns
hosts:
の行のところでmdns_minimal [NOTFOUND=return]
がresolve
とdns
より左側に来るようにする。
firewallを有効にしている場合はmdns
を許可しておく。
VcXsrvに転送する設定
Linux側の設定
/etc/profile
の末尾に次のように設定する。
export DISPLAY=windows-host-name:0
windows-host-name
には自分のホストマシンのホスト名(=PC名)を入れる。
Windows側の設定
VcXsrvをインストールしておく。wingetを使うのがおすすめ。
winget install marha.VcXsrv
一旦XLaunchを実行し設定ファイルを作成する。
私はあたかもLinuxを実機で使っているかのように使いたいので以下のように設定する。
Select display settings One window without titlebar Display number: 0
Select how to start clients Start no client
Extra settings Clipboardにチェック Primary Selectionにチェック Native openglにチェック Disable access controlにチェック
Additional parametars fo VcXsrv
はここを見ながら好みで入れる。
私はr -keyhook -screen 0 @2
とした。
-keyhook
はLinux側のキーバインドを使うためには必須だが、VcXsrvを全画面で実行してしまうとVcXsrvを終了させられなくなってしまう場合があるので注意してた方が良い。
-screen 0 @2
はLinuxのディスプレイ0
をwindowsのディスプレイ2
に表示するという意味になる。
最後にSave configuration
ボタンを押して適当な場所に保存する。
以降の操作は保存した設定でVcXsrvが起動してあるものとして話を進める。
VcXsrvを通すとWindowsのクリップボードと仮想マシンのクリップボードを共有できる。
要は以降の操作では仮想マシンに対してコピペで操作ができる。
共有フォルダの設定
Windows側の設定
- 任意の場所にフォルダを作ってプロパティを開く。
- 「共有」タブ
- 「詳細な共有(D)...」
- 「このフォルダを共有する(S)」
- 「共有名(H)」に適当な名前を入れる。この名前でLinux側からアクセスすることになる。
- 必要があれば「同時に共有できるユーザー数(L)」の値を変更する。
- 必要があれば「アクセス許可(P)」から権限の設定をする。
私はevery oneを削除しWindowsのログインユーザーにフルコントロールを付与している。 - フォルダのプロパティの共有タブ上の方に「ネットワークパス(N)」が表示されているはずなのでメモしておく。
\\ホスト名\共有名
となっているはず。
以降、ネットワークパスが\\WINDOWS\share
となっているとする。
Linux側の設定
- ディストリビューションによってパッケージ名が変わると思うが
cifs-utils
とsamba
をインストールする。 - 共有フォルダをマウントするディレクトリを作成しておく。
例として/mnt/hyperv
を作成する。
また、後でアクセスし易いように所有者をログインユーザーに変えておく
sudo mkdir /mnt/hyperv sudo chown $USER:$USER /mnt/hyperv
- 共有フォルダをマウントするときに認証情報を入力しなくても良いようにユーザー名とパスワードをファイルに保存しておく。
sudo mkdir -p /etc/samba/creds sudoedit /etc/samba/creds/windows.cred
username=windowsのユーザー名 password=上記のユーザーのパスワード
- systemdのユニットファイルを作成する。
この時、ファイル名は2.
で作成したパスの先頭の/
をなくし、先頭以外の/
を-
にしたパスに等しくする必要がある。
sudoedit /etc/systemd/system/mnt-hyperv.mount
[Unit] Description=mount //WINDOWS/share /mnt/hyperv Requires=systemd-networkd.service After=network-online.target systemd-resolved.service Wants=network-online.target systemd-resolved.service [Mount] What=//WINDOWS/share Where=/mnt/hyperv Options=credentials=/etc/samba/creds/windows.cred,iocharset=utf8,rw,x-systemd.automount,uid=1000,gid=1000 Type=cifs TimeoutSec=30 [Install] WantedBy=multi-user.target
sudo systemctl daemon-reload sudo systemctl enable mnt-hyperv.mount
セキュアブートの設定
なるべく汎用的な説明にしてきたが、面倒なので次の操作はmanjaroにフォーカスした説明にする。
ブートローダーはrefind
+preloader-signed
を使う。
sudo pacman -S refind yay yay -S preloader-signed sudo refind-install --preloader /usr/share/preloader-signed/PreLoader.efi
ESP
と/boot
をセキュアブートで楽に扱うために調整していく。
sudo su - mkdir /efi umount /boot/efi mount /dev/sda1 /efi mkdir -p /efi/EFI/Kernels/Manjaro mv /boot/* /efi/EFI/Kernels/Manjaro mount --bind /efi/EFI/Kernels/Manjaro /boot vi /etc/fstab
-UUID=XXXX-XXXX /boot/efi vfat umask=0077 0 2 +UUID=XXXX-XXXX /efi vfat umask=0077 0 2 +/efi/EFI/Kernels/Manjaro /boot none bind 0 0
ディストリビューションやインストール時の設定によってオプションに違いがあるかもしれないが適宜読み替える。
refindの設定も変えておく
sudoedit /efi/EFI/refind/refind.conf
ここでは変更する設定だけ記載する。
timeout 2 resolution max use_graphics_for linux,grub also_scan_dirs +,EFI/Kernels/Manjaro extra_kernel_version_strings linux-lts,linux
カーネルパラメータも変えておく
sudoedit /boot/refind_linux.conf
"Boot with standard options" "root=UUID=xx-xx-xx-xx-xx rw rootflags=subvol=@ intrd=EFI\Kernels\Manjaro\amd-ucode.img initrd=EFI\Kernels\Manjaro\initramfs-%v.img quiet splash apparmor=1 security=apparmor udev.log_priority=3"
上記設定は/
のファイルシステムにbtrfsを指定してmanjaroをインストールした場合。
ここで一旦シャットダウンする。
仮想マシンの設定からファームウェア
を見に行き、ブート順の最上位が以下のようになっていることを確認する。
種類: ファイル 値: PreLoader.efi
ここでセキュアブートをオフのまま、仮想マシンを起動しログインできるか確認する。
問題なく起動できたらもう一度シャットダウンし、仮想マシンの設定のセキュリティ
でセキュアブートを有効にする
にチェックを入れ、Microsoft UEFI 証明機関
かオープンソースシールドVM
を選ぶ。(どちらを選んで良いかいまいちわからない起動してみてダメだったらもう片方とすれば良いと思う)
仮想マシンを起動しMOK managerが起動するか確認する。
refindのブートローダ本体とvmlinuzの2つを登録する。
EFI/refind/loader.efi
とEFI/Kernles/Manjaro/vmlinuz-6.6-x86_64
(vmlinuzの後の文字列はディストリビューションやカーネルによって変わるので注意)
MOK managerを終了し、ログインできるか確認する。
ついでに音も鳴らす
Linux側の設定
sudoedit /etc/pulse/client.conf
default-server = WINDOWS
WINDOWS
の部分はホスト名を入れる。
設定後は再起動しておく。
Windows側の設定
pulseaudioのインストール
PulseAudio on Windows – PulseAudio
上記リンクのzipfile containing preview binaries
がダウンロードリンクになっている。
ダウンロードして任意の場所に配置する。
pulseaudioの設定
DLしたpulseaudioのファイルを2つ編集する。
etc/pulse/daemon.conf
exit-idle-time = -1
デフォルトだと応答がなかったとき(?)にpulseaudioが終了するので-1にして終了しないようにする。
etc/pulse/default.pa
load-module module-native-protocol-tcp auth-anonymous=1
pulseaudioの起動
bin/pulseaudio.exe
を起動すれば良いのだが、windows11では初回にダブルクリックするだけだと通信がファイアウォールに弾かれて起動できなかった。
一旦ターミナルで起動して、ファイアウォールの許可リストに追加する。
起動するとコンソールが開いて何行か出力がある。
Linuxの音を出したい間はこのコンソールを開きっぱなしにしておく必要がある。
おわりに
ここまででタイトル通りの環境がセットアップできた。
後は用途に応じて必要なソフトウェアをインストールしていけば良い。