0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

M2 Macbook のUTMでUbuntuを使う

0
Last updated at Posted at 2026-02-08

Macbook のUTMで仮想Ubuntu 24 を使ってみた。一部失敗して諦め。

MacはSequoia 15.6

手順

  1. Ubuntu 24 isoをダウンロード。arm64のserver。
  2. UTMでisoを指定して起動。qemuじゃない方を選択。

起動はしたが、バックスラッシュとアンダースコアが入力できない。
以前のUbuntu 22の時はできていたのだが、そのファイルはこちら。

基本ログインから

# /etc/default/keyboard

XKBMODEL="pc105"
XKBLAYOUT="jp,jp"
XKBVARIANT=",mac"
XKBOPTIONS=""

BACKSPACE="guess"
sudo dpkg-reconfigure keyboard-configuration

でキーボードを色々変えてみたがダメ。
setxkbmap jp
を使えという話もあったが、これもダメ。
検索したがUbuntuなのに情報がない。
mozcの機能を使うという話もあったが、こちらはmozcもibusも使わないのだ。

xevでキーコードを検出してXmodmapで割り当てろ、という話も見たが、
xevでキーが検出されなかった。諦め。

Ubuntu側でssh-serverをたて、そこにログインすることでキーが使えるはず。

sudo apt install opensssh-server
sudo systemctl enable ssh
sudo systemctl start ssh

sudo apt install ufw -y
sudo apt ufw allow ssh
sudo ufw enable

if a # でUbuntu側ipアドレスを確認

ssh username@Ubuntu側IPアドレス

で入れた。

Xのアプリを動かす

MacもX11なのでUbuntuのX11アプリも表示できるはず。

Mac側準備
Appleが公式にXQuartzを出しているが、デフォルトではインストールされていない。
XQuartz公式
からインストール。再起動は不要だった。

/etc/ssh/sshd_config を編集

# /etc/ssh/sshd_config
# 以下のコメントを外す

X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes
sudo systemctl restart ssh

そしてログアウトして再度sshでログイン

ssh -Y username@Ubuntu側IPアドレス

そしてUbuntu側でアプリ起動

sudo apt install x11-apps -y
xeyes

出た!

ここの時点でUbuntu側xtermもMacに表示が出て、バックスラッシュもアンダースコアも入力できる。バックスラッシュは円記号だが。

じゃあgnome-terminalも動くよな
でもエラーが出た

No matching fbConfigs or visuals found
glx: failed to create drisw screen

Mac側で間接的なGL描画を許可

defaults write org.xquartz.X11 enable_iglx -bool true

これでエラーは出なくなった。しかしUbuntuの方で表示されてしまう。

dbus-run-session -- gnome-terminal --working-directory=$HOME

で一瞬だけ表示されたが消えた。エラーメッセージはこちら

A connection to the bus can't be made

これは「dbus-run-session で作った一時的な通信路と、Ubuntu本体の通信路が衝突して自滅」ということだが対処方法がない。他のターミナルを探す。

xfce4-terminal
xterm
terminator

は使える。

さらに執念で表示させる

gnome-terminal が Mac 側の X11 サーバーと通信するのを邪魔している環境変数をリセット

GDK_BACKEND=x11 GNOME_TERMINAL_SCREEN=1 dbus-run-session -- bash -c "export DISPLAY=$DISPLAY; xauth add $(xauth list $DISPLAY); gnome-terminal --app-id=org.gnome.Terminal.Custom$(date +%s) --working-directory=$HOME"

warningがめっちゃ出るけどgnome-terminalがmacに表示された。

やっていること

呪文 効能
GDK_BACKEND=x11 Wayland阻止。MacはX11のみ
GNOME_TERMINAL_SCREEN=1 既存プロセスへの合流阻止。gnome-terminalは既存プロセスがあるとそちらに合流しようとする。
dbus-run-session -- bash -c "..." 隔離された通信箱の作成。通常、アプリはUbuntu本体の「D-Bus(アプリ間通信のハブ)」に繋がろうとする。しかし、SSH越しだとそのハブに触らせてもらえない。そこで、**「このコマンド専用の使い捨て通信ハブ(Session Bus)」**をその場で作って、その中でアプリを隔離して動かす。
export DISPLAY=$DISPLAY; xauth add $(xauth list $DISPLAY) 鍵(認証情報)の持ち込み。 上の手順で作った「隔離された箱」の中は真っさらなので、Macへ映像を送るための宛先(DISPLAY)も、接続するための合鍵(xauth のマジッククッキー)もまだない状態。 箱の外(SSHセッション)から**「宛先はここだぞ」「鍵はこれだぞ」と情報を箱の中にコピー**する。
gnome-terminal --app-id=org.gnome.Terminal.Custom$(date +%s) 名前の偽装。gnome-terminal は起動時に「俺は org.gnome.Terminal だ」と名乗る。すると、Ubuntu本体側で動いている管理者が「お、その名前なら俺が面倒見るよ(でも画面はUbuntu側に出すぞ)」と横取りしてしまう。 ここで date +%s(現在の秒数)を使って org.gnome.Terminal.Custom174000000 のようにデタラメな名前を名乗らせることで、本体の管理者に気づかれず、Mac側のプロセスとして独立させることができる。
gnome-terminal --app-id=org.gnome.Terminal.Custom$(date +%s)

これだけで出た。今度はwarningは全くでない。これが正しいようだ。
Shift+Ctrl+C, Shift+Ctrl+V のコピペショートカットがUTMだと使えなかったが、これなら使えている。便利と言えば便利。

GTKプログラミング

目的であるGTKプログラミングのために、簡単なサンプルを動かす。
と、クラッシュ。

libEGL warning: DRI3 error: Could not get DRI3 device
libEGL warning: Ensure your X server supports DRI3 to get accelerated rendering
No matching fbConfigs or visuals found
glx: failed to create drisw screen
No provider of glGenSamplers found.  Requires one of:
    Desktop OpenGL 3.3
    GL_ARB_sampler_objects
    OpenGL ES 3.0
中止 (コアダンプ)
XLIB_SKIP_ARGB_VISUALS=1 GSK_RENDERER=cairo python3 test.py

これは、warningは消えないが、起動できる。

GLをやめるとワーニングもなくなり、起動できた。

GDK_DEBUG=gl-disable GSK_RENDERER=cairo python3 test.py
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?