😫

コンテナーのubuntu22.04LTSにリモートデスクトップすることをあきらめた話

2023/11/10に公開

はじめに

Podmanの上で稼働しているubuntu 22.04LTSにホストであるMacからリモートデスクトップで接続しようとしました。しかし、以下の2つがうまくいかずめちゃはまりました。

  • 日本語入力ができない
  • ブラウザーがインストールできない

結局コンテナーで稼働しているubuntu 22.04LTSにはブラウザーをインストールすることができず諦めました。こんなことも何かの役に立つかもしれないと思いここに記録を残すことにします。

(解決)日本語が入力できない

結論から先に書きますと、

というだけでした。

以下のDockerfileでコンテナーを作って、ホストであるMacのブラウザーからリモートデスクトップで接続しました。しかし、日本語入力ができません。「Mozcの設定」もまったく動作しませんでした。

FROM ubuntu:latest

#環境変数
ENV DEBIAN_FRONTEND=noninteractive \  
    TZ=Asia/Tokyo \
    LANG=ja_JP.UTF-8 \
    LANGUAGE=ja_JP:ja 
    GTK_IM_MODULE=ibus \
    QT_IM_MODULE=ibus \
    XMODIFIERS=@im=ibus

RUN apt-get update && apt-get install --no-install-recommends -y \
    python3.11 \
    python3-pip \
    xfce4 \
    xfce4-goodies \
    tigervnc-standalone-server \ 
    novnc \
    websockify \ 
    xterm \
    dbus-x11 \
    x11-utils \
    x11-xserver-utils \
    x11-apps \
    iputils-ping \
    net-tools \
    dnsutils \
    curl \
    wget \
    tzdata \
    sudo \
    snapd \
    init \ 
    xdg-user-dirs \
    language-pack-ja-base \
    language-pack-ja \
    im-config \
    ibus \
    ibus-mozc \
    mozc-utils-gui \
    fonts-takao \
    locales && \
    locale-gen ja_JP.UTF-8 \
    && \
# Clean up
    apt-get clean && \
    rm -rf /var/cache/apt/archives/* /var/lib/apt/lists/*

RUN touch /root/.Xauthority

# Rename user directories Japanese to English.
RUN LANG=C xdg-user-dirs-update --force

EXPOSE 5901
EXPOSE 6080

ENTRYPOINT vncserver -localhost no -SecurityTypes None -geometry 1360x768 --I-KNOW-THIS-IS-INSECURE && \
openssl req -new -subj "/C=JP" -x509 -days 365 -nodes -out self.pem -keyout self.pem && \
websockify -D --web=/usr/share/novnc/ --cert=self.pem 6080 localhost:5901 && tail -f /dev/null

以下のように一般ユーザーを追加してビルドすることで解決しました。

ARG USERNAME=user
ARG GROUPNAME=user
ARG UID=1000
ARG GID=1000
ARG PASSWORD=user
RUN groupadd -g $GID $GROUPNAME && \
    useradd -m -s /bin/bash -u $UID -g $GID -G sudo $USERNAME && \
    echo $USERNAME:$PASSWORD | chpasswd && \
    echo "$USERNAME   ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
USER $USERNAME
WORKDIR /home/$USERNAME/

(未解決)ブラウザーがインストールできない

Dockerfileに以下を記述すればFirefoxがインストールできるものと考えていました。

apt-get install firefox

コンテナーイメージのビルドはまったく問題なく終わるのですが、リモートデスクトップからブラウザーを起動することができません。
原因は、パッケージ管理ツールであるsnapを使ってインストールしなくてはならないということだとわかりました。Chromiumも同じです。しかし、コンテナーではsnapのデーモンであるsnapdを起動することができません。snapdを起動するためにはsystemdがPID 1で起動していなくてはならないのですが、コンテナーではsystemdは起動していません。コンテナーでsystemdを起動する方法がぐぐると見つかりますがどれも結構煩雑です。

またfirefoxのdeb版をインストールする記事がいくつもみつかり、参照して試してみましたがうまくいきませんでした。

検索して見つかる方法はDockerfileでなんとかなるようなものではなく、くじけてしまいました。。。

おわりに

コンテナーで稼働しているubuntu 22.04LTSにブラウザーをインストールする方法をご存知でしたら教えてください。

Discussion