tmux 3.1c
私の開発環境は通常、Windows端末で実行されているdockerインスタンスです。起動スクリプトはホスト名と$USER
一致するuid
/gid
値を使用して新しいユーザーアカウントを作成するため、環境内のファイルを変更すると正しい権限が得られます。このコマンドを使用してユーザーのシェルを起動しますrunuser
。
これはほとんどの場合うまく機能しますが、インスタンスとtmuxを起動してウィンドウのサイズを変更すると、tmuxインスタンスのサイズは変更されません。stty size
また、更新されずに無効な値が表示されます。
これはDockerインスタンス内でのみ発生します。 Windows端末内部のホスト自体でtmuxを実行しても問題ありません。実際、通常のdockerインスタンスでtmuxを実行すると問題はありませんが、$USER
そのアカウントを使用して実行するとrunuser
競合が発生します。
複雑に見えるかもしれませんが、私が考えることができる最小の再現可能な例です。使用を削除しrunuser
て簡単に実行すると、root
tmuxを実行すると端末が正しく調整されます。対照的に、tmuxを使用して起動しrunuser
ないと、出力stty size
も正しく調整されます。したがって、問題が発生したdocker / runuser / tmuxの相互作用に関連しています。
以下は、私が思いついた再現可能な最小の例です。
docker-compose.yml
version: "3.3"
services:
test:
build: .
stdin_open: true
tty: true
hostname: "test"
ドッカーファイル
FROM python:3.9.10
RUN apt-get update
RUN apt-get install -y less sudo tmux
COPY add_user.sh /tmp/add_user.sh
adduser.sh
#!/bin/bash
USERNAME=$1
GROUPNAME=$1
USERID=$2
GROUPID=$3
addgroup --gid $GROUPID $GROUPNAME
adduser --uid $USERID --gecos "" --disabled-password --gid $GROUPID $USERNAME
chown -R $USERNAME:$GROUP /home/$USERNAME
start.sh
USERID=$(id -u ${USER})
GROUPID=$(id -g ${USER})
CMD="/tmp/add_user.sh $USER $USERID $GROUPID && runuser -l $USER -c '/bin/bash'"
docker-compose --file $(dirname $0)/docker-compose.yml run --rm test bash -c "$CMD"
ステップコピー
docker compose build && ./launch.sh
次に、tmuxを開き、ウィンドウのサイズを確認します。
tmux
stty size
私の場合、次のような結果が出ます。
quant@test:~$ stty size
18 106
それでは、ウィンドウのサイズを変更してみてください。私の場合、これはtmuxウィンドウを混乱させ、カーソルが画面の間違った部分に移動し、以前stty size
と同じ出力を生成します。
tmuxを終了して実行すると、stty size
正しい結果が生成されます。
quant@test:~$ tmux
[exited]
quant@test:~$ stty size
19 69
この問題の原因は何ですか?
システムの詳細:
- Tmuxのバージョンは3.1cです。
- Windows端末は1.13.11431.0です。
- ホストOSは、Debian BusterのWSL2インスタンスを実行するWindows 10です。
答え1
私が見つけた解決策を投稿します。なぜrunuser
失敗したのかまだ理解していないので、これは答えではありませんが、交換するのはトリックrunuser -l $USER -c '/bin/bash'
ですlaunch.sh
。sudo -u $USER '/bin/bash'
runuser
それで、tmux
and / orの間に奇妙なことが起こっていますが、docker
それが何であるかよくわかりません...