KVMでホストのUbuntuとゲストのWindows11でクリップボードのコピーをできるようにする

めちゃくちゃ苦労したのでメモ。

ホストとゲストの間でSPICEというプロトコルを使って通信をする。

ホスト側では仮想マシンにコントローラ(spice)とチャネル(Spice シリアル)を追加する。

ゲスト側のWindows 11はFedraが提供している以下の2つをインストールする

  • virtio-win-gurest-tools (いわゆるVirtio Agent)
  • Spice Agent

「ゲストのインストーラはFedara公式のlatestからダウンロードする」と書いているサイトもあるがそのままでは「サイトが見つからない」というエラーになる。

なぜならlatestのリンク先がhttps://fedorapeople.org:3923/groups/virt/virtio-win/direct-downloads/となっており、3923という無駄なポートが指定されているから。

ポート番号を抜いてhttps://fedorapeople.org/groups/virt/virtio-win/direct-downloads/とすればダウンロードサイトに行ける。

ここでvirtio-win.isoをダウンロードする。

virtio-win.isoをゲストOS側でダブルクリックするとマウントできるので、中にあるvirto-win-guest-tools.exeとvirto-win-gt-x64.msiをダブルクリックしてインストールする。

OSを再起動して、servicesコマンドでサービスの状態を確認し、spice agentが起動していればコピペができるようになる

ASUS T101HAにLubuntuをインストールしてタイムカードの代わりにした話

残業や休憩時間の管理が厳しくなっている昨今。

出勤時間や退勤時間、休憩時間を正しく把握するために設備投資が必要になるのですが..

  • タイムカードは本体が10万円。ランニングコストが月1万円
  • Excelに入力させると入力漏れや不正確な入力、不正が起きやすい
  • クラウド勤怠などのサービスを使用すると従業員の人数に応じて毎月数千円のコストがかかるうえ、やっぱり入力漏れが発生する

ということでとにかく手間とお金がかかる割には正確な入力ができない。という問題に直面します。

というわけで、更衣室にタッチパネルをおいて出勤・退勤・休憩のタイミングでボタンを押してもらう運用にしました。

ハードは2in1のタッチスクリーンのPC。アプリはブラウザで作って記録はGoogleに保存。というとてもシンプルな構成。

タッチスクリーンのPCは以前Androidをインストールしようとして動作しなかったASUSのT101HA。中古市場で5000円しないくらい。

OSは軽量LinuxのLubuntuを採用しました。

"ASUS T101HAにLubuntuをインストールしてタイムカードの代わりにした話" 続きを読む

qemu/kvmのゲストOSの設定あれこれ

Ubuntuのqemu/kvmのゲストOSにWindows 11をインストールした。

このままでは以下のとおり使いにくい点が有るのであれこれ設定する

解像度を変更できないSPICE Guest Toolsをインストールする
画面サイズに合わせて解像度を自動調整したい(調査中)
ホスト-ゲスト間でコピペができないSpice agentをインストールする
"qemu/kvmのゲストOSの設定あれこれ" 続きを読む

古いモニタの解像度を調整する

UbuntuでNECのAS223WMと富士通のVL-17BSEを使っているのだが、VL-17BSEの解像度が1024x768以上の解像度にできない。(厳密にはできるのだが適切なアスペクト比がなく縦長や横長になってしまう)

OSが自動で認識してくれないのであればxrandrで強制的に設定すればいいじゃん。ということで試してみたがaddmodeのところでBadMatchという致命的なエラーが出てしまう。

EDID(モニターがXserverに送っているモニタ情報)を編集するのはリスクが高いなーと躊躇していたらとても良いサイトが合ったのでそちらを参考に設定したらうまく行った。

参考にしたサイト
【解決策】Ubuntu 24.04+NVIDIA環境で複数モニターを使おうとすると解像度が860×480に固定される問題

AppArmorのまとめ

Linuxのセキュリティはとにかくややこしい。

古典的なパーミッションやACLは「DAC」という分類に入る。

rootにすら権限を与えない「MAC」という方式もある。ただ、具体的なコマンドとして提供されるわけではなく、AppArmorやSELinuxといったフレームワークで表現されることが多い。フレームワーク化したMACのことをまとめてLSMと呼ぶ

DACとMACは共存できる。そして今回はAppArmorの話。

"AppArmorのまとめ" 続きを読む

Ubuntu でAndroidとGSConnectが接続できない場合の対処法

AndroidのスマホとでストップPCはGSConnectでつながるのに、AndroidのスマホとノートPCはつながらない。という現象が起きていた。

原因はノートPC側でUDPポート1716がブロックされていたから。

ufwで1716/udpを開放してあげたら使えるようになった話。

"Ubuntu でAndroidとGSConnectが接続できない場合の対処法" 続きを読む

古いNetBookにAndroidをインストールできなかった件

しばらく使っていなかったASUS T101HAにAndroid-x86をインストールしてみたがWifiがつながらず何もできない。

あと、SDカードにインストールしたらブートできない。というわけで解決策が見つかるまで放置することにした。

まあWindowsは動いてるしね。気長に行こう。

"古いNetBookにAndroidをインストールできなかった件" 続きを読む

UbuntuでBluetoothをオンにできなくなった場合の対処法

部屋の模様替えをしてUbuntu周りのケーブルの配線をやり直したところ

Ubuntuの設定でBluetoothの設定画面を開き、右上のスライドをオンにしても数秒でオフになってしまう。

という現象が起きたので対処方法を列挙しておきます。

"UbuntuでBluetoothをオンにできなくなった場合の対処法" 続きを読む

Dockerfileで改行がうまく機能しない原因と対策

Litespeedの初期パスワードを設定するadmpass.sh

echo -e "admin\n\
password\n\
password\n" | /usr/local/lsws/admin/misc/admpass.sh

をコマンドで実行するとうまく動作するのだが

run echo -e "admin\n\
 password\n\
 password\n" | /usr/local/lsws/admin/misc/admpass.sh

では正しく動作しない。

原因はdocker image内にあるechoがシェル関数のechoになるから。

シェル関数は -eオプションを持っていないので/usr/bin/echoを使ってあげる必要がある。

run /usr/bin/echo -e "admin\n\
 password\n\ 
 password\n" | /usr/local/lsws/admin/misc/admpass.sh

これだとちゃんと動作してくれた。