devcontainer: expose host config, fix mac screen issues (#29932)

* export host config via .host/.env file. fix mac display issues

* append instead of replace for bashrc

* Log when mac display override happens

* Update xauthority path in json
pull/29937/head
Kacper Rączy 2 years ago committed by GitHub
parent 09bef0a165
commit dd26a1faad
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      .devcontainer/.gitignore
  2. 14
      .devcontainer/container_post_create.sh
  3. 7
      .devcontainer/container_post_start.sh
  4. 8
      .devcontainer/devcontainer.json
  5. 24
      .devcontainer/host_setup.sh
  6. 16
      .devcontainer/setup_host.sh

@ -1 +1,3 @@
.Xauthority .Xauthority
.env
.host/

@ -0,0 +1,14 @@
#!/usr/bin/env bash
source .devcontainer/.host/.env
# override display flag for mac
if [[ $HOST_OS == darwin ]]; then
echo "Setting up DISPLAY override for macOS..."
cat <<EOF >> /root/.bashrc
if [ -n "\$DISPLAY" ]; then
DISPLAY_NUM=\$(echo "\$DISPLAY" | awk -F: '{print \$NF}')
export DISPLAY=host.docker.internal:\$DISPLAY_NUM
fi
EOF
fi

@ -0,0 +1,7 @@
#!/usr/bin/env bash
# setup safe directories for submodules
SUBMODULE_DIRS=$(git config --file .gitmodules --get-regexp path | awk '{ print $2 }')
for DIR in $SUBMODULE_DIRS; do
git config --global --add safe.directory "$PWD/$DIR"
done

@ -3,9 +3,9 @@
"build": { "build": {
"dockerfile": "Dockerfile" "dockerfile": "Dockerfile"
}, },
"postCreateCommand": "bash -c 'if [[ $DISPLAY == *xquartz* ]]; then echo \"export DISPLAY=host.docker.internal:0\" >> /root/.bashrc; fi'", "postCreateCommand": ".devcontainer/container_post_create.sh",
"postStartCommand": "git config --file .gitmodules --get-regexp path | awk '{ print $2 }' | xargs -I{} git config --global --add safe.directory \"$PWD/{}\"", "postStartCommand": ".devcontainer/container_post_start.sh",
"initializeCommand": ".devcontainer/setup_host.sh", "initializeCommand": ".devcontainer/host_setup.sh",
"privileged": true, "privileged": true,
"containerEnv": { "containerEnv": {
"DISPLAY": "${localEnv:DISPLAY}", "DISPLAY": "${localEnv:DISPLAY}",
@ -14,7 +14,7 @@
}, },
"runArgs": [ "runArgs": [
"--volume=/tmp/.X11-unix:/tmp/.X11-unix", "--volume=/tmp/.X11-unix:/tmp/.X11-unix",
"--volume=${localWorkspaceFolder}/.devcontainer/.Xauthority:/root/.Xauthority", "--volume=${localWorkspaceFolder}/.devcontainer/.host/.Xauthority:/root/.Xauthority",
"--volume=${localEnv:HOME}/.comma:/root/.comma", "--volume=${localEnv:HOME}/.comma:/root/.comma",
"--volume=/tmp/comma_download_cache:/tmp/comma_download_cache", "--volume=/tmp/comma_download_cache:/tmp/comma_download_cache",
"--volume=/tmp/devcontainer_scons_cache:/tmp/scons_cache", "--volume=/tmp/devcontainer_scons_cache:/tmp/scons_cache",

@ -0,0 +1,24 @@
#!/usr/bin/env bash
# setup .host dir
mkdir -p .devcontainer/.host
# setup links to Xauthority
XAUTHORITY_LINK=".devcontainer/.host/.Xauthority"
rm -f $XAUTHORITY_LINK
if [[ -z $XAUTHORITY ]]; then
echo "XAUTHORITY not set. Fallback to ~/.Xauthority ..."
if ! [[ -f $HOME/.Xauthority ]]; then
echo "~/.XAuthority file does not exist. GUI tools may not work properly."
touch $XAUTHORITY_LINK # dummy file to satisfy container volume mount
else
ln -sf $HOME/.Xauthority $XAUTHORITY_LINK
fi
else
ln -sf $XAUTHORITY $XAUTHORITY_LINK
fi
# setup host env file
HOST_INFO_FILE=".devcontainer/.host/.env"
SYSTEM=$(uname -s | tr '[:upper:]' '[:lower:]')
echo "HOST_OS=\"$SYSTEM\"" > $HOST_INFO_FILE

@ -1,16 +0,0 @@
#!/usr/bin/env bash
# setup links to Xauthority
XAUTHORITY_LINK=".devcontainer/.Xauthority"
rm -f $XAUTHORITY_LINK
if [[ -z $XAUTHORITY ]]; then
echo "XAUTHORITY not set. Fallback to ~/.Xauthority ..."
if ! [[ -f $HOME/.Xauthority ]]; then
echo "~/.XAuthority file does not exist. GUI tools may not work properly."
touch $XAUTHORITY_LINK # dummy file to satisfy container volume mount
else
ln -sf $HOME/.Xauthority $XAUTHORITY_LINK
fi
else
ln -sf $XAUTHORITY $XAUTHORITY_LINK
fi
Loading…
Cancel
Save