Skip to content

Conversation

@doofmars
Copy link
Contributor

@doofmars doofmars commented Jul 14, 2025

This is a setup for local devcontainer setup using vscode and docker.
The benefit is that the setup will take care of creating the environment and dependencies required for running the project.
On the host beside the editor and docker every other development dependency is contained in the container.

To display the image the inky library provides a mocked interface that would generate a window to simulate the display.
Currently as the refresh is not happening in the main thread this feature is mocked away, no preview is used.
Still the current image and log output can be used to estimate what is happening.

I'm raising this PR open for discussion @fatihak not sure how you deveop new features I like having a docker setup to encapsulate the dev-dependencies.

See this as a suggestion, if you have further questions feel free to ask.

doofmars added 2 commits July 6, 2025 12:35
This enables docker based devcontainers that contain all developmentation dependencies and is configured using code.
Which allows to fast develop new features or plugins without requiring any hardware.
For different host operating systems and mocks the display refresh.
Display refresh would in theory also work but currently has issues with the rendering not happening on the main thread.
@fatihak
Copy link
Owner

fatihak commented Jul 16, 2025

Thanks for the PR! I've been wanting to work on this but haven't had much of an opportunity so far. Some thoughts:

  • Can you add a README with setup instructions?
  • Not sure what you mean by "Currently as the refresh is not happening in the main thread this feature is mocked away" - is the refresh task not running in the docker container? Eventually it would be nice to have a mock display working, perhaps by implementing a new display class rather than using the InkyDisplay, but what you have should be a good start for now.

@doofmars
Copy link
Contributor Author

I have added a readme feel free to test this out.

@fatihak I'm referring to this change in line 68 where the self.inky_display.set_image(image) is called. This happens currently in a separate thread which is not an issue in a setup with real hardware.

In the devcontainer setup the hardware is not there thus mock=true config is used. Then the inky library is created with self.inky_display = auto(ask_user=True). Now a window emulates the screen, which requires main thread to run. The root cause is a call to tkinter.PhotoImage in the mock setup which fails with RuntimeError: main thread is not in main loop. Thus the change (before line 68) is required to just skip this call.

To answer your questions:
refresh task is running fine, the actual update image fails in the mock case.
Eventually it would be nice to have a mock display working -> yes agreed this can be made working if we somehow let the image update run on the main thread.

For this change I did not want to dive into thread logic thus a simple workaround was chosen.

@Ifouldm
Copy link

Ifouldm commented Jul 18, 2025

I was trying to create a similar dev environment but this seems to be a better approach it would be nice to be able to use the mock display but it at least allows development outside of the physical hardware. I was able to get it working on Linux but not on Windows are there host dependancies for display output?

Exception has occurred: TclError
couldn't connect to display

doofmars added 2 commits July 22, 2025 18:24
Generates thumbnails and store files in cache for faster load times
Cleanup on image delete
Create folder on plugin init
Set gitignore automatically if not exists
Set gallery and thumbnails folder as constant
Remove redundant checks, folders should exist after init
@doofmars
Copy link
Contributor Author

@Ifouldm Thanks for testing this out on Linux.
For your Windows issue: I'm not sure what I have installed/configured on my machine.
Might be differences in used docker or wsl version this thing is not trivial somehow.

Can you check if the mock=true config option is set?
Or if the display value is set in your docker environment, via echo $DISPLAY in your wsl console.
In my devcontainer this returns :0

Might be related to this: microsoft/vscode-remote-release#7565 but now I'm just guessing :D

@deftdawg
Copy link
Contributor

deftdawg commented Nov 2, 2025

I was considering trying to dockerize this project before I came across this PR. My goal would be to run this in a Container, stub in a display device that does HTTP Posts to an ESP32 based e-ink Spectra 6 (GoodDisplay Wifi devkit)...

@doofmars I tried to get this going with a clean checkout of your branch using VS Code (NixOS Linux host), it prompted me to reopen then built a docker container, there were several errors towards the end (see 2nd log below) before post-install failed because there was no src/config/device.json (1st log below)... Is it expected that one has done install/install.sh -W <device> before starting this (so a device.json gets generated)?

Log 1: Configuring... Terminal Output

Running the postCreateCommand from devcontainer.json...

[85049 ms] Start: Run in container: /bin/sh -c sh .devcontainer/post-create.sh
cp: cannot create regular file 'src/config/device.json': Permission denied
[85102 ms] postCreateCommand from devcontainer.json failed with exit code 1. Skipping any further user-provided commands.
Done. Press any key to close the terminal.

Log 2: Dev Containers Terminal Output

[57 ms] Dev Containers 0.427.0 in VS Code 1.105.1 (7d842fb85a0275a4a8e4d7e040d2625abbf7f084).
[56 ms] Start: Resolving Remote
[63 ms] Setting up container for folder or workspace: /home/deftdawg/source/InkyPi-DevContainer
[63 ms] Host: unix:///run/user/1000/docker.sock
[64 ms] Start: Check Docker is running
[65 ms] Start: Run: docker version
[100 ms] Client:
Version: 28.5.1
API version: 1.51
Go version: go1.25.1
Git commit: v28.5.1
Built: Thu Jan 1 00:00:00 1970
OS/Arch: linux/amd64
Context: default

Server:
Engine:
Version: 28.5.1
API version: 1.51 (minimum version 1.24)
Go version: go1.25.1
Git commit: v28.5.1
Built: Tue Jan 1 00:00:00 1980
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v2.1.4
GitCommit: refs/tags/v2.1.4
runc:
Version: 1.3.0
GitCommit:
docker-init:
Version: 0.19.0
GitCommit:
rootlesskit:
Version: 2.3.5
ApiVersion: 1.1.1
NetworkDriver: slirp4netns
PortDriver: builtin
StateDir: /run/user/1000/dockerd-rootless
slirp4netns:
Version: 1.3.3
GitCommit: 944fa94090e1fd1312232cbc0e6b43585553d824
[102 ms] Start: Run: docker volume ls -q
[116 ms] Start: Run: docker volume create vscode
[129 ms] Start: Run: docker ps -q -a --filter label=vsch.local.folder=/home/deftdawg/source/InkyPi-DevContainer --filter label=vsch.quality=stable
[139 ms] Start: Run: docker ps -q -a --filter label=devcontainer.local_folder=/home/deftdawg/source/InkyPi-DevContainer --filter label=devcontainer.config_file=/home/deftdawg/source/InkyPi-DevContainer/.devcontainer/linux-host/devcontainer.json
[150 ms] Start: Run: docker ps -q -a --filter label=devcontainer.local_folder=/home/deftdawg/source/InkyPi-DevContainer
[162 ms] Start: Run: docker ps -q -a --filter label=devcontainer.local_folder=/home/deftdawg/source/InkyPi-DevContainer
[172 ms] Running Dev Containers CLI: up --user-data-folder /home/deftdawg/.config/Code/User/globalStorage/ms-vscode-remote.remote-containers/data --container-session-data-folder /tmp/devcontainers-ab553066-db0a-4ff3-b362-38c98b3700c51762122597492 --workspace-folder /home/deftdawg/source/InkyPi-DevContainer --workspace-mount-consistency cached --gpu-availability detect --id-label devcontainer.local_folder=/home/deftdawg/source/InkyPi-DevContainer --id-label devcontainer.config_file=/home/deftdawg/source/InkyPi-DevContainer/.devcontainer/linux-host/devcontainer.json --log-level debug --log-format json --config /home/deftdawg/source/InkyPi-DevContainer/.devcontainer/linux-host/devcontainer.json --default-user-env-probe loginInteractiveShell --mount type=volume,source=vscode,target=/vscode,external=true --skip-post-create --update-remote-user-uid-default on --mount-workspace-git-root --include-configuration --include-merged-configuration
[172 ms] Start: Run: /nix/store/9md1j1rg9j6r0jy7y5qc3kimm0pdfp8a-vscode-1.105.1/lib/vscode/code /home/deftdawg/.vscode/extensions/ms-vscode-remote.remote-containers-0.427.0/dist/spec-node/devContainersSpecCLI.js up --user-data-folder /home/deftdawg/.config/Code/User/globalStorage/ms-vscode-remote.remote-containers/data --container-session-data-folder /tmp/devcontainers-ab553066-db0a-4ff3-b362-38c98b3700c51762122597492 --workspace-folder /home/deftdawg/source/InkyPi-DevContainer --workspace-mount-consistency cached --gpu-availability detect --id-label devcontainer.local_folder=/home/deftdawg/source/InkyPi-DevContainer --id-label devcontainer.config_file=/home/deftdawg/source/InkyPi-DevContainer/.devcontainer/linux-host/devcontainer.json --log-level debug --log-format json --config /home/deftdawg/source/InkyPi-DevContainer/.devcontainer/linux-host/devcontainer.json --default-user-env-probe loginInteractiveShell --mount type=volume,source=vscode,target=/vscode,external=true --skip-post-create --update-remote-user-uid-default on --mount-workspace-git-root --include-configuration --include-merged-configuration
[279 ms] @devcontainers/cli 0.80.1. Node.js v22.19.0. linux 6.12.53 x64.
[279 ms] Start: Run: docker buildx version
[324 ms] github.com/docker/buildx v0.29.1
[324 ms]
[324 ms] Start: Run: docker -v
[335 ms] Start: Resolving Remote
[337 ms] Start: Run: git rev-parse --show-cdup
[342 ms] Loading 147 extra certificates from /etc/ssl/certs/ca-certificates.crt.
[516 ms] Start: Run: docker ps -q -a --filter label=devcontainer.local_folder=/home/deftdawg/source/InkyPi-DevContainer --filter label=devcontainer.config_file=/home/deftdawg/source/InkyPi-DevContainer/.devcontainer/linux-host/devcontainer.json
[529 ms] Start: Run: docker inspect --type image mcr.microsoft.com/devcontainers/python:1-3.12-bullseye
[1375 ms] Start: Run: docker buildx build --load --build-arg BUILDKIT_INLINE_CACHE=1 -f /tmp/devcontainercli-deftdawg/container-features/0.80.1-1762122599381/Dockerfile-with-features -t vsc-inkypi-devcontainer-98c313fbc833536b3933c07389f15bed03d41d0f87659cc2a39e29fe1ae3d247 --target dev_containers_target_stage --build-arg _DEV_CONTAINERS_BASE_IMAGE=dev_container_auto_added_stage_label /home/deftdawg/source/InkyPi-DevContainer/.devcontainer
[+] Building 67.5s (9/9) FINISHED docker:default
=> [internal] load build definition from Dockerfile-with-features 0.0s
=> => transferring dockerfile: 2.26kB 0.0s
=> [internal] load metadata for mcr.microsoft.com/devcontainers/python:1 0.5s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 168B 0.0s
=> [dev_container_auto_added_stage_label 1/4] FROM mcr.microsoft.com/de 55.4s
=> => resolve mcr.microsoft.com/devcontainers/python:1-3.12-bullseye@sha 0.0s
=> => sha256:2d765646d883a37610a09973a079fbba4c7596e5 53.75MB / 53.75MB 17.9s
=> => sha256:06772a4eff3df697497bb68b4dcdeb97fdb9338b5 54.76MB / 54.76MB 6.7s
=> => sha256:cf244ba2b96e9515d1f9efb6641419e9cfec8a9de5f 1.61kB / 1.61kB 0.0s
=> => sha256:49390cdfaf63736134ddda7883b0f5dbcad6e3378 23.59kB / 23.59kB 0.0s
=> => sha256:06408a499c9b569e198473b636afa8c383e459ee6 15.77MB / 15.77MB 9.5s
=> => sha256:7b2240bd305e2ef8681b25231f468f71e033aee5015 3.54kB / 3.54kB 0.0s
=> => sha256:6fd49c17bd36c59d7bf7afe446ee52f36cad8a 197.14MB / 197.14MB 47.9s
=> => sha256:089065dacd989ec91ceced4d92271d45d8aeee5115 6.05MB / 6.05MB 12.9s
=> => sha256:edfbc7e2dc179c612b48e1f6b921a9d37e8a0984 26.15MB / 26.15MB 21.6s
=> => extracting sha256:2d765646d883a37610a09973a079fbba4c7596e54d18d044 0.9s
=> => sha256:59f81e1f8a98121ff327d2d7a0322fbdb0c78f955049d8 250B / 250B 18.0s
=> => sha256:83e9ae4993daad845ccbde202c6b014c93fde9cb 14.41MB / 14.41MB 21.3s
=> => extracting sha256:06408a499c9b569e198473b636afa8c383e459ee6fe76ba4 0.2s
=> => extracting sha256:06772a4eff3df697497bb68b4dcdeb97fdb9338b5e7dde7d 0.9s
=> => sha256:bd9bceb7e42afa662474de33c4b41cc5b80c920e37 8.62MB / 8.62MB 23.1s
=> => sha256:7b48d42ae432aca4eb60238540612fcecc9cc0f8389b82 409B / 409B 21.8s
=> => sha256:b390e7ca19eb24128b757619e864a4c41ad40bee6761a1 134B / 134B 22.0s
=> => sha256:8c31508a32eb49c9876d08de87061facc470e727e91b6c 223B / 223B 22.2s
=> => sha256:c5e65fc85b8ca0128e58c931480f4b676a3cab728faeff 232B / 232B 22.4s
=> => sha256:184642b1a78b22c36c44846e3e9d3db039f36a0e 49.62MB / 49.62MB 34.2s
=> => sha256:1ffdf64730b6722ebbf009b255974c9899d855d2 66.05MB / 66.05MB 41.7s
=> => sha256:0d5335fb3be1be4795f21d10baffb283891f08bd52 2.31MB / 2.31MB 34.6s
=> => sha256:a04b8001a23012b10c375972d5f9e00011cdd146 71.24MB / 71.24MB 43.7s
=> => extracting sha256:6fd49c17bd36c59d7bf7afe446ee52f36cad8a6393628526 2.8s
=> => extracting sha256:089065dacd989ec91ceced4d92271d45d8aeee511566e0b8 0.1s
=> => extracting sha256:edfbc7e2dc179c612b48e1f6b921a9d37e8a09845e8a8697 0.4s
=> => extracting sha256:59f81e1f8a98121ff327d2d7a0322fbdb0c78f955049d848 0.0s
=> => extracting sha256:83e9ae4993daad845ccbde202c6b014c93fde9cb362b84a1 0.1s
=> => extracting sha256:bd9bceb7e42afa662474de33c4b41cc5b80c920e3733975b 0.2s
=> => extracting sha256:7b48d42ae432aca4eb60238540612fcecc9cc0f8389b82e3 0.0s
=> => extracting sha256:b390e7ca19eb24128b757619e864a4c41ad40bee6761a142 0.0s
=> => extracting sha256:8c31508a32eb49c9876d08de87061facc470e727e91b6c19 0.0s
=> => extracting sha256:c5e65fc85b8ca0128e58c931480f4b676a3cab728faefff6 0.0s
=> => extracting sha256:184642b1a78b22c36c44846e3e9d3db039f36a0eef2fea78 0.9s
=> => extracting sha256:1ffdf64730b6722ebbf009b255974c9899d855d230e8e402 0.9s
=> => extracting sha256:0d5335fb3be1be4795f21d10baffb283891f08bd52a33f5b 0.1s
=> => extracting sha256:a04b8001a23012b10c375972d5f9e00011cdd146fd22c665 1.4s
=> [dev_container_auto_added_stage_label 2/4] COPY debian-requirements.t 0.4s
=> [dev_container_auto_added_stage_label 3/4] RUN apt-get update 2.1s
=> [dev_container_auto_added_stage_label 4/4] RUN xargs -a debian-requir 8.6s
=> exporting to image 0.3s
=> => exporting layers 0.2s
=> => preparing layers for inline cache 0.0s
=> => writing image sha256:a2720d6b9b126307de944ec35c6e058dc90a1ea032d54 0.0s
=> => naming to docker.io/library/vsc-inkypi-devcontainer-98c313fbc83353 0.0s
[68910 ms] Start: Run: docker inspect --type image vsc-inkypi-devcontainer-98c313fbc833536b3933c07389f15bed03d41d0f87659cc2a39e29fe1ae3d247
[68923 ms] Start: Run: docker build -f /tmp/devcontainercli-deftdawg/updateUID.Dockerfile-0.80.1 -t vsc-inkypi-devcontainer-98c313fbc833536b3933c07389f15bed03d41d0f87659cc2a39e29fe1ae3d247-uid --platform linux/amd64 --build-arg BASE_IMAGE=vsc-inkypi-devcontainer-98c313fbc833536b3933c07389f15bed03d41d0f87659cc2a39e29fe1ae3d247 --build-arg REMOTE_USER=vscode --build-arg NEW_UID=1000 --build-arg NEW_GID=100 --build-arg IMAGE_USER=root /home/deftdawg/.config/Code/User/globalStorage/ms-vscode-remote.remote-containers/data/empty-folder
[+] Building 2.2s (6/6) FINISHED docker:default
=> [internal] load build definition from updateUID.Dockerfile-0.80.1 0.0s
=> => transferring dockerfile: 1.36kB 0.0s
=> WARN: InvalidDefaultArgInFrom: Default value for ARG $BASE_IMAGE resu 0.0s
=> [internal] load metadata for docker.io/library/vsc-inkypi-devcontaine 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/2] FROM docker.io/library/vsc-inkypi-devcontainer-98c313fbc833536b 0.0s
=> [2/2] RUN eval $(sed -n "s/vscode:[^:]:([^:]):([^:]):[^:]:([ 2.0s
=> exporting to image 0.1s
=> => exporting layers 0.1s
=> => writing image sha256:f9e78f17e6b312e0e9f129a9b2f0c9183246cf1e45e72 0.0s
=> => naming to docker.io/library/vsc-inkypi-devcontainer-98c313fbc83353 0.0s

1 warning found (use docker --debug to expand):

  • InvalidDefaultArgInFrom: Default value for ARG $BASE_IMAGE results in empty or invalid base image name (line 2)
    [71288 ms] Start: Run: docker events --format {{json .}} --filter event=start
    [71290 ms] Start: Starting container
    [71290 ms] Start: Run: docker run --sig-proxy=false -a STDOUT -a STDERR --mount type=bind,source=/home/deftdawg/source/InkyPi-DevContainer,target=/workspaces/InkyPi-DevContainer --mount source=/tmp/.X11-unix,target=/tmp/.X11-unix,type=bind --mount type=volume,src=vscode,dst=/vscode -l devcontainer.local_folder=/home/deftdawg/source/InkyPi-DevContainer -l devcontainer.config_file=/home/deftdawg/source/InkyPi-DevContainer/.devcontainer/linux-host/devcontainer.json -e SRC_DIR=/workspaces/InkyPi/src -e DISPLAY=:0 --entrypoint /bin/sh vsc-inkypi-devcontainer-98c313fbc833536b3933c07389f15bed03d41d0f87659cc2a39e29fe1ae3d247-uid -c echo Container started
    Container started
    [71532 ms] Start: Run: docker ps -q -a --filter label=devcontainer.local_folder=/home/deftdawg/source/InkyPi-DevContainer --filter label=devcontainer.config_file=/home/deftdawg/source/InkyPi-DevContainer/.devcontainer/linux-host/devcontainer.json
    [71542 ms] Start: Run: docker inspect --type container 07338921d076
    [71554 ms] Start: Inspecting container
    [71554 ms] Start: Run: docker inspect --type container 07338921d0762b6849627d112dbf2fbb5914cd7687d6b2240150fd9085eac44a
    [71567 ms] Start: Run in container: /bin/sh
    [71569 ms] Start: Run in container: uname -m
    [71670 ms] x86_64
    [71670 ms]
    [71670 ms] Start: Run in container: (cat /etc/os-release || cat /usr/lib/os-release) 2>/dev/null
    [71671 ms] PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
    NAME="Debian GNU/Linux"
    VERSION_ID="11"
    VERSION="11 (bullseye)"
    VERSION_CODENAME=bullseye
    ID=debian
    HOME_URL="https://www.debian.org/"
    SUPPORT_URL="https://www.debian.org/support"
    BUG_REPORT_URL="https://bugs.debian.org/"
    [71671 ms]
    [71671 ms] Start: Run in container: (command -v getent >/dev/null 2>&1 && getent passwd 'vscode' || grep -E '^vscode|^[^:]:[^:]:vscode:' /etc/passwd || true)
    [71672 ms] Start: Run in container: test -f '/var/devcontainer/.patchEtcEnvironmentMarker'
    [71672 ms]
    [71672 ms]
    [71672 ms] Exit code 1
    [71673 ms] Start: Run in container: /bin/sh
    [71675 ms] Start: Run in container: test ! -f '/var/devcontainer/.patchEtcEnvironmentMarker' && set -o noclobber && mkdir -p '/var/devcontainer' && { > '/var/devcontainer/.patchEtcEnvironmentMarker' ; } 2> /dev/null
    [71826 ms]
    [71827 ms]
    [71827 ms] Start: Run in container: cat >> /etc/environment <<'etcEnvironmentEOF'
    [71830 ms]
    [71830 ms]
    [71830 ms] Start: Run in container: test -f '/var/devcontainer/.patchEtcProfileMarker'
    [71831 ms]
    [71831 ms]
    [71831 ms] Exit code 1
    [71831 ms] Start: Run in container: test ! -f '/var/devcontainer/.patchEtcProfileMarker' && set -o noclobber && mkdir -p '/var/devcontainer' && { > '/var/devcontainer/.patchEtcProfileMarker' ; } 2> /dev/null
    [71832 ms]
    [71832 ms]
    [71832 ms] Start: Run in container: sed -i -E 's/((^|\s)PATH=)([^\$])$/\1${PATH:-\3}/g' /etc/profile || true
    [71833 ms]
    [71833 ms]
    [71839 ms] Start: Run: docker inspect --type container 07338921d0762b6849627d112dbf2fbb5914cd7687d6b2240150fd9085eac44a
    [71852 ms] Start: Run: docker exec -i -u root 07338921d0762b6849627d112dbf2fbb5914cd7687d6b2240150fd9085eac44a /bin/sh -c echo "New container started. Keep-alive process started." ; export VSCODE_REMOTE_CONTAINERS_SESSION=ab553066-db0a-4ff3-b362-38c98b3700c51762122597492 ; /bin/sh
    [71853 ms] Start: Inspecting container
    [71853 ms] Start: Run: docker inspect --type container 07338921d0762b6849627d112dbf2fbb5914cd7687d6b2240150fd9085eac44a
    [71865 ms] Start: Run in container: /bin/sh
    [71867 ms] Start: Run in container: uname -m
    [71899 ms] New container started. Keep-alive process started.
    [71900 ms] x86_64
    [71900 ms]
    [71900 ms] Start: Run in container: (cat /etc/os-release || cat /usr/lib/os-release) 2>/dev/null
    [71901 ms] PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
    NAME="Debian GNU/Linux"
    VERSION_ID="11"
    VERSION="11 (bullseye)"
    VERSION_CODENAME=bullseye
    ID=debian
    HOME_URL="https://www.debian.org/"
    SUPPORT_URL="https://www.debian.org/support"
    BUG_REPORT_URL="https://bugs.debian.org/"
    [71901 ms]
    [71901 ms] Start: Run in container: (command -v getent >/dev/null 2>&1 && getent passwd 'vscode' || grep -E '^vscode|^[^:]
    :[^:]*:vscode:' /etc/passwd || true)
    [71902 ms] safe.directory: Looking up root folder for workspace folder '/workspaces/InkyPi-DevContainer'.
    [71902 ms] Start: Run in container: command -v git >/dev/null 2>&1 && ROOT_FOLDER="$(git -C '/workspaces/InkyPi-DevContainer' rev-parse --show-toplevel)" && test "$(stat -c %u "$ROOT_FOLDER")" != "$(id -u)" && echo -n "$ROOT_FOLDER"
    [71903 ms]
    [71903 ms] fatal: detected dubious ownership in repository at '/workspaces/InkyPi-DevContainer'
    To add an exception for this directory, call:

     git config --global --add safe.directory /workspaces/InkyPi-DevContainer
    

[71903 ms] Exit code 128
[71903 ms] safe.directory: Checking host ownership of root folder '/workspaces/InkyPi-DevContainer' at mount point '/workspaces/InkyPi-DevContainer'.
[71904 ms] Start: Run: /bin/sh -c cd '/home/deftdawg/source/InkyPi-DevContainer' && test "$(stat -c %u .)" = "$(id -u)"
[71909 ms] safe.directory: Root folder '/workspaces/InkyPi-DevContainer' owned by current user on host but not owned by remote user in container. Adding to safe directory list in Git system config.
[71909 ms] Start: Run in container: /bin/sh
[71911 ms] Start: Run in container: git config --system --get-all safe.directory | grep -x '/workspaces/InkyPi-DevContainer' || git config --system --add safe.directory '/workspaces/InkyPi-DevContainer'
[71952 ms]
[71952 ms]
[71952 ms] Start: Updating configuration state
[71954 ms] Start: Setup shutdown monitor
[71955 ms] Forking shutdown monitor: /home/deftdawg/.vscode/extensions/ms-vscode-remote.remote-containers-0.427.0/dist/shutdown/shutdownMonitorProcess /run/user/1000/vscode-remote-containers-ff1a7557-9904-43a0-96c8-a8121b65067c.sock singleContainer Debug /home/deftdawg/.config/Code/logs/20251024T022049/window7/exthost/ms-vscode-remote.remote-containers 1762122598006
[71959 ms] Start: Run in container: test -d '/home/vscode/.vscode-server'
[71960 ms]
[71960 ms]
[71960 ms] Exit code 1
[71960 ms] Start: Run in container: test -d '/home/vscode/.vscode-remote'
[71960 ms]
[71960 ms]
[71960 ms] Exit code 1
[71961 ms] Start: Run in container: test ! -f '/home/vscode/.vscode-server/data/Machine/.writeMachineSettingsMarker' && set -o noclobber && mkdir -p '/home/vscode/.vscode-server/data/Machine' && { > '/home/vscode/.vscode-server/data/Machine/.writeMachineSettingsMarker' ; } 2> /dev/null
[72009 ms]
[72009 ms]
[72009 ms] Start: Run in container: test -f '/home/vscode/.vscode-server/data/Machine/settings.json'
[72009 ms]
[72009 ms]
[72009 ms] Exit code 1
[72010 ms] Start: Run in container: which apt dpkg snap dnf yum rpm apk docker git gh kubectl podman curl wget ssh scp rsync gpg ps lsof netstat top tree find grep zip unzip tar gzip bzip2 xz || true
[72012 ms] Start: Run in container: mkdir -p '/home/vscode/.vscode-server/data/Machine' && cat >'/home/vscode/.vscode-server/data/Machine/settings.json' <<'settingsJSON'
[72014 ms]
[72014 ms]
[72014 ms] Start: Run in container: test ! -f '/home/vscode/.vscode-server/data/Machine/.writeMachineMCPConfigMarker' && set -o noclobber && mkdir -p '/home/vscode/.vscode-server/data/Machine' && { > '/home/vscode/.vscode-server/data/Machine/.writeMachineMCPConfigMarker' ; } 2> /dev/null
[72015 ms]
[72015 ms]
[72015 ms] Start: Run in container: test -f '/home/vscode/.vscode-server/data/User/mcp.json'
[72015 ms]
[72015 ms]
[72015 ms] Exit code 1
[72016 ms] Start: Run in container: test -d '/home/vscode/.vscode-server/bin/7d842fb85a0275a4a8e4d7e040d2625abbf7f084'
[72016 ms]
[72016 ms]
[72016 ms] Exit code 1
[72016 ms] Start: Run in container: test -d '/vscode/vscode-server/bin/linux-x64/7d842fb85a0275a4a8e4d7e040d2625abbf7f084'
[72017 ms]
[72017 ms]
[72017 ms] Exit code 1
[72017 ms] Installing VS Code Server for commit 7d842fb85a0275a4a8e4d7e040d2625abbf7f084
[72017 ms] Start: Downloading VS Code Server
[72018 ms] 7d842fb85a0275a4a8e4d7e040d2625abbf7f084 linux-x64 stable
[72018 ms] URL: https://update.code.visualstudio.com/commit:7d842fb85a0275a4a8e4d7e040d2625abbf7f084/server-linux-x64/stable
[72018 ms] Path: /tmp/vsch-deftdawg/serverCache/7d842fb85a0275a4a8e4d7e040d2625abbf7f084/vscode-server-linux-x64.tar.gz
[83791 ms] Start: Installing VS Code Server
[83792 ms] Start: Run in container: mkdir -p /vscode/vscode-server/bin/linux-x64/7d842fb85a0275a4a8e4d7e040d2625abbf7f084_1762122681798
[83793 ms]
[83793 ms]
[83825 ms] Start: Run in container: (dd iflag=fullblock bs=8192 count=8756; dd iflag=fullblock bs=5845 count=1) | tar --no-same-owner -xz -C /vscode/vscode-server/bin/linux-x64/7d842fb85a0275a4a8e4d7e040d2625abbf7f084_1762122681798
[84642 ms] 8756+0 records in
8756+0 records out
71729152 bytes (72 MB, 68 MiB) copied, 0.807036 s, 88.9 MB/s
1+0 records in
1+0 records out
5845 bytes (5.8 kB, 5.7 KiB) copied, 1.9375e-05 s, 302 MB/s
[84643 ms]
[84643 ms] Start: Run in container: mv -n /vscode/vscode-server/bin/linux-x64/7d842fb85a0275a4a8e4d7e040d2625abbf7f084_1762122681798/* /vscode/vscode-server/bin/linux-x64/7d842fb85a0275a4a8e4d7e040d2625abbf7f084 && rmdir /vscode/vscode-server/bin/linux-x64/7d842fb85a0275a4a8e4d7e040d2625abbf7f084_1762122681798
[84645 ms]
[84645 ms]
[84645 ms] Start: Run in container: mkdir -p '/home/vscode/.vscode-server/bin' && ln -snf '/vscode/vscode-server/bin/linux-x64/7d842fb85a0275a4a8e4d7e040d2625abbf7f084' '/home/vscode/.vscode-server/bin/7d842fb85a0275a4a8e4d7e040d2625abbf7f084'
[84647 ms]
[84647 ms]
[84647 ms] Start: Run in container: touch '/vscode/vscode-server/bin/linux-x64/7d842fb85a0275a4a8e4d7e040d2625abbf7f084' && cd '/vscode/vscode-server/bin/linux-x64' && ls -td [^_]????????????? | tail -n +10 | xargs rm -rf
[84647 ms] Start: Run in container: test -x '/home/vscode/.vscode-server/bin/7d842fb85a0275a4a8e4d7e040d2625abbf7f084/bin/helpers/check-requirements.sh'
[84647 ms]
[84647 ms]
[84647 ms] Start: Run in container: '/home/vscode/.vscode-server/bin/7d842fb85a0275a4a8e4d7e040d2625abbf7f084/bin/helpers/check-requirements.sh'
[84649 ms]
[84649 ms]
[84669 ms]
[84669 ms]
[84670 ms] Start: Launching Dev Containers helper.
[84670 ms] ssh-agent: SSH_AUTH_SOCK not set on local host.
[84670 ms] Start: Run in container: gpgconf --list-dirs
[84671 ms] sysconfdir:/etc/gnupg
bindir:/usr/bin
libexecdir:/usr/lib/gnupg
libdir:/usr/lib/x86_64-linux-gnu/gnupg
datadir:/usr/share/gnupg
localedir:/usr/share/locale
socketdir:/home/vscode/.gnupg
dirmngr-socket:/home/vscode/.gnupg/S.dirmngr
agent-ssh-socket:/home/vscode/.gnupg/S.gpg-agent.ssh
agent-extra-socket:/home/vscode/.gnupg/S.gpg-agent.extra
agent-browser-socket:/home/vscode/.gnupg/S.gpg-agent.browser
agent-socket:/home/vscode/.gnupg/S.gpg-agent
homedir:/home/vscode/.gnupg
[84671 ms]
[84671 ms] Start: Run in container: ls '/home/vscode/.gnupg/private-keys-v1.d' 2>/dev/null
[84672 ms]
[84672 ms]
[84672 ms] Exit code 2
[84672 ms] Start: Run: gpgconf --list-dirs
[84675 ms] spawn gpgconf ENOENT
[84675 ms] gpg-agent: No agent-extra-socket found on local host.
[84675 ms] Start: Run in container: (command -v 'docker' || command -v 'oras' || command -v 'skopeo') >/dev/null 2>&1
[84676 ms]
[84676 ms]
[84676 ms] Exit code 127
[84676 ms] Start: Run in container: /bin/sh
[84678 ms] userEnvProbe: loginInteractiveShell (default)
[84678 ms] Start: Run in container: test -f '/tmp/devcontainers-ab553066-db0a-4ff3-b362-38c98b3700c51762122597492/env-loginInteractiveShell.json'
[84678 ms] Start: Run in container: echo ~
[84679 ms]
[84679 ms]
[84679 ms] Exit code 1
[84679 ms] userEnvProbe: not found in cache
[84679 ms] userEnvProbe shell: /bin/bash
[84680 ms] Start: Run in container: # Test for /home/vscode/.ssh/known_hosts and ssh
[84681 ms]
[84681 ms]
[84681 ms] Start: Run in container: # Copy /home/deftdawg/.ssh/known_hosts to /home/vscode/.ssh/known_hosts
[84682 ms]
[84682 ms]
[84682 ms] Start: Run in container: command -v git >/dev/null 2>&1 && git config --system --replace-all credential.helper '!f() { /home/vscode/.vscode-server/bin/7d842fb85a0275a4a8e4d7e040d2625abbf7f084/node /tmp/vscode-remote-containers-9cd2ff49-b57e-4e0f-a3e9-e9cce5335134.js git-credential-helper $
; }; f' || true
[84683 ms]
[84683 ms]
[84684 ms] Start: Run in container: for pid in cd /proc && ls -d [0-9]*; do { echo $pid ; readlink /proc/$pid/cwd || echo ; readlink /proc/$pid/ns/mnt || echo ; cat /proc/$pid/stat | tr "
[84706 ms] Start: Run in container: cat '/home/vscode/.vscode-server/bin/7d842fb85a0275a4a8e4d7e040d2625abbf7f084/product.json'
[84707 ms] Start: Run in container: cat '/home/vscode/.vscode-server/data/Machine/.connection-token-7d842fb85a0275a4a8e4d7e040d2625abbf7f084' 2>/dev/null || (umask 377 && echo '3a716548-2da3-4c32-8350-8c7f18b1dad9' >'/home/vscode/.vscode-server/data/Machine/.connection-token-7d842fb85a0275a4a8e4d7e040d2625abbf7f084-10fa8172-abe7-461e-b2a4-80e7868d3fb8' && mv -n '/home/vscode/.vscode-server/data/Machine/.connection-token-7d842fb85a0275a4a8e4d7e040d2625abbf7f084-10fa8172-abe7-461e-b2a4-80e7868d3fb8' '/home/vscode/.vscode-server/data/Machine/.connection-token-7d842fb85a0275a4a8e4d7e040d2625abbf7f084' && rm -f '/home/vscode/.vscode-server/data/Machine/.connection-token-7d842fb85a0275a4a8e4d7e040d2625abbf7f084-10fa8172-abe7-461e-b2a4-80e7868d3fb8' && cat '/home/vscode/.vscode-server/data/Machine/.connection-token-7d842fb85a0275a4a8e4d7e040d2625abbf7f084')
[84709 ms] 3a716548-2da3-4c32-8350-8c7f18b1dad9
[84709 ms]
[84710 ms] Start: Starting VS Code Server
[84710 ms] Start: Preparing Extensions
[84710 ms] Start: Run in container: test ! -f '/home/vscode/.vscode-server/data/Machine/.installExtensionsMarker' && set -o noclobber && mkdir -p '/home/vscode/.vscode-server/data/Machine' && { > '/home/vscode/.vscode-server/data/Machine/.installExtensionsMarker' ; } 2> /dev/null
[84711 ms]
[84711 ms]
[84712 ms] Extensions cache, install extensions: dbaeumer.vscode-eslint, ms-python.python, ms-python.vscode-pylance, ms-python.autopep8
[84712 ms] Start: Run in container: test -d /home/vscode/.vscode-server/extensionsCache && ls /home/vscode/.vscode-server/extensionsCache || true
[84712 ms]
[84712 ms]
[84712 ms] Start: Run in container: test -d /vscode/vscode-server/extensionsCache && ls /vscode/vscode-server/extensionsCache || true
[84712 ms]
[84713 ms]
[84713 ms] Extensions cache, link in container: None
[84713 ms] Optimizing extensions for quality: stable
[84713 ms] Start: Run in container: /home/vscode/.vscode-server/bin/7d842fb85a0275a4a8e4d7e040d2625abbf7f084/bin/code-server --log debug --force-disable-user-env --server-data-dir /home/vscode/.vscode-server --telemetry-level all --accept-server-license-terms --host 127.0.0.1 --port 0 --connection-token-file /home/vscode/.vscode-server/data/Machine/.connection-token-7d842fb85a0275a4a8e4d7e040d2625abbf7f084 --extensions-download-dir /home/vscode/.vscode-server/extensionsCache --install-extension dbaeumer.vscode-eslint --install-extension ms-python.python --install-extension ms-python.vscode-pylance --install-extension ms-python.autopep8 --start-server --skip-requirements-check
[84724 ms] /home/vscode
[84724 ms]
[84724 ms] Start: Run in container: cat <<'EOF-/tmp/vscode-remote-containers-9cd2ff49-b57e-4e0f-a3e9-e9cce5335134.js' >/tmp/vscode-remote-containers-9cd2ff49-b57e-4e0f-a3e9-e9cce5335134.js
[84725 ms]
[84725 ms]
[84725 ms] Start: Run in container: cat <<'EOF-/tmp/vscode-remote-containers-server-9cd2ff49-b57e-4e0f-a3e9-e9cce5335134.js' >/tmp/vscode-remote-containers-server-9cd2ff49-b57e-4e0f-a3e9-e9cce5335134.js_1762122682731
[84727 ms]
[84727 ms]
[84780 ms] userEnvProbe PATHs:
Probe: '/usr/local/python/current/bin:/usr/local/py-utils/bin:/usr/local/jupyter:/usr/local/share/nvm/current/bin:/usr/local/bin:/usr/local/python/current/bin:/usr/local/py-utils/bin:/usr/local/jupyter:/usr/local/share/nvm/current/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/vscode/.local/bin'
Container: '/usr/local/python/current/bin:/usr/local/py-utils/bin:/usr/local/jupyter:/usr/local/share/nvm/current/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
[84780 ms] Start: Run in container: mkdir -p '/tmp/devcontainers-ab553066-db0a-4ff3-b362-38c98b3700c51762122597492' && cat > '/tmp/devcontainers-ab553066-db0a-4ff3-b362-38c98b3700c51762122597492/env-loginInteractiveShell.json' << 'envJSON'
[84782 ms]
[84782 ms]
[84808 ms] *

[84811 ms] Server bound to 127.0.0.1:42935 (IPv4)
Extension host agent listening on 42935

[84811 ms] Start: Run in container: echo 42935 >'/home/vscode/.vscode-server/data/Machine/.devport-7d842fb85a0275a4a8e4d7e040d2625abbf7f084'
[84812 ms]
[84812 ms]
[84812 ms] Port forwarding for container port 42935 starts listening on local port.
[84813 ms] Port forwarding local port 42935 to container port 42935
[84813 ms] Running Dev Containers CLI: run-user-commands --user-data-folder /home/deftdawg/.config/Code/User/globalStorage/ms-vscode-remote.remote-containers/data --container-session-data-folder /tmp/devcontainers-ab553066-db0a-4ff3-b362-38c98b3700c51762122597492 --workspace-folder /home/deftdawg/source/InkyPi-DevContainer --id-label devcontainer.local_folder=/home/deftdawg/source/InkyPi-DevContainer --id-label devcontainer.config_file=/home/deftdawg/source/InkyPi-DevContainer/.devcontainer/linux-host/devcontainer.json --container-id 07338921d0762b6849627d112dbf2fbb5914cd7687d6b2240150fd9085eac44a --log-level debug --log-format json --config /home/deftdawg/source/InkyPi-DevContainer/.devcontainer/linux-host/devcontainer.json --default-user-env-probe loginInteractiveShell --skip-non-blocking-commands false --prebuild false --stop-for-personalization true --remote-env REMOTE_CONTAINERS_IPC=/tmp/vscode-remote-containers-ipc-9cd2ff49-b57e-4e0f-a3e9-e9cce5335134.sock --remote-env REMOTE_CONTAINERS=true --mount-workspace-git-root --terminal-columns 272 --terminal-rows 42 --dotfiles-target-path ~/dotfiles
[84813 ms] Start: Run: /nix/store/9md1j1rg9j6r0jy7y5qc3kimm0pdfp8a-vscode-1.105.1/lib/vscode/code /home/deftdawg/.vscode/extensions/ms-vscode-remote.remote-containers-0.427.0/dist/spec-node/devContainersSpecCLI.js run-user-commands --user-data-folder /home/deftdawg/.config/Code/User/globalStorage/ms-vscode-remote.remote-containers/data --container-session-data-folder /tmp/devcontainers-ab553066-db0a-4ff3-b362-38c98b3700c51762122597492 --workspace-folder /home/deftdawg/source/InkyPi-DevContainer --id-label devcontainer.local_folder=/home/deftdawg/source/InkyPi-DevContainer --id-label devcontainer.config_file=/home/deftdawg/source/InkyPi-DevContainer/.devcontainer/linux-host/devcontainer.json --container-id 07338921d0762b6849627d112dbf2fbb5914cd7687d6b2240150fd9085eac44a --log-level debug --log-format json --config /home/deftdawg/source/InkyPi-DevContainer/.devcontainer/linux-host/devcontainer.json --default-user-env-probe loginInteractiveShell --skip-non-blocking-commands false --prebuild false --stop-for-personalization true --remote-env REMOTE_CONTAINERS_IPC=/tmp/vscode-remote-containers-ipc-9cd2ff49-b57e-4e0f-a3e9-e9cce5335134.sock --remote-env REMOTE_CONTAINERS=true --mount-workspace-git-root --terminal-columns 272 --terminal-rows 42 --dotfiles-target-path ~/dotfiles
[84819 ms] Initializing configuration support...
[84819 ms] Internal initialization of dev container support package...
[84824 ms] Port forwarding connection from 43546 > 42935 > 42935 in the container.
[84824 ms] Start: Run in container: /home/vscode/.vscode-server/bin/7d842fb85a0275a4a8e4d7e040d2625abbf7f084/node -e
[84833 ms] Ignoring option 'skip-requirements-check': not supported for server.
[84835 ms] [22:31:22]

[84858 ms] [22:31:22] Installing extensions...
[84859 ms] [22:31:22] Extension host agent started.
[84882 ms] Port forwarding 43546 > 42935 > 42935 stderr: Connection established
[84886 ms] [22:31:22] Error while reading the extension cache file: /home/vscode/.vscode-server/data/CachedProfilesData/default__profile/extensions.builtin.cache Unable to read file '/home/vscode/.vscode-server/data/CachedProfilesData/default__profile/extensions.builtin.cache' (Error: Unable to resolve nonexistent file '/home/vscode/.vscode-server/data/CachedProfilesData/default__profile/extensions.builtin.cache')
[84886 ms] [22:31:22] Started initializing default profile extensions in extensions installation folder. file:///home/vscode/.vscode-server/extensions
[84898 ms] Port forwarding connection from 43572 > 42935 > 42935 in the container.
[84898 ms] Start: Run in container: /home/vscode/.vscode-server/bin/7d842fb85a0275a4a8e4d7e040d2625abbf7f084/node -e
[84901 ms] [22:31:22] ComputeTargetPlatform: linux-x64
[84910 ms] [22:31:22] [127.0.0.1][332fc8a1][ManagementConnection] New connection established.
[84911 ms] [22:31:22] Completed initializing default profile extensions in extensions installation folder. file:///home/vscode/.vscode-server/extensions
[84914 ms] @devcontainers/cli 0.80.1. Node.js v22.19.0. linux 6.12.53 x64.
[84914 ms] Start: Run: docker buildx version
[84916 ms] [22:31:22] ComputeTargetPlatform: linux-x64
[84927 ms] [22:31:22] Log level changed to info
[84952 ms] github.com/docker/buildx v0.29.1
[84952 ms]
[84953 ms] Start: Run: docker -v
[84960 ms] Port forwarding 43572 > 42935 > 42935 stderr: Connection established
[84965 ms] Start: Run: git rev-parse --show-cdup
[84969 ms] Start: Run: docker inspect --type container 07338921d0762b6849627d112dbf2fbb5914cd7687d6b2240150fd9085eac44a
[84981 ms] Start: Inspecting container
[84981 ms] Start: Run: docker inspect --type container 07338921d0762b6849627d112dbf2fbb5914cd7687d6b2240150fd9085eac44a
[84993 ms] Start: Run in container: /bin/sh
[84995 ms] Start: Run in container: uname -m
[85011 ms] [22:31:23] [127.0.0.1][36741bd7][ExtensionHostConnection] New connection established.
[85013 ms] [22:31:23] [127.0.0.1][36741bd7][ExtensionHostConnection] <403> Launched Extension Host Process.
[85039 ms] x86_64
[85039 ms]
[85039 ms] Start: Run in container: (cat /etc/os-release || cat /usr/lib/os-release) 2>/dev/null
[85040 ms] PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
[85040 ms]
[85041 ms] Start: Run in container: (command -v getent >/dev/null 2>&1 && getent passwd 'vscode' || grep -E '^vscode|^[^:]:[^:]:vscode:' /etc/passwd || true)
[85042 ms] userEnvProbe: loginInteractiveShell (default)
[85042 ms] Start: Run in container: test -f '/tmp/devcontainers-ab553066-db0a-4ff3-b362-38c98b3700c51762122597492/env-loginInteractiveShell.json'
[85042 ms]
[85043 ms]
[85043 ms] Start: Run in container: mkdir -p '/home/vscode/.devcontainer' && CONTENT="$(cat '/home/vscode/.devcontainer/.onCreateCommandMarker' 2>/dev/null || echo ENOENT)" && [ "${CONTENT:-2025-11-02T22:31:09.306537509Z}" != '2025-11-02T22:31:09.306537509Z' ] && echo '2025-11-02T22:31:09.306537509Z' > '/home/vscode/.devcontainer/.onCreateCommandMarker'
[85044 ms]
[85044 ms]
[85044 ms] Start: Run in container: cat '/tmp/devcontainers-ab553066-db0a-4ff3-b362-38c98b3700c51762122597492/env-loginInteractiveShell.json'
[85045 ms] {
"NVM_RC_VERSION": "",
"PYTHON_SHA256": "c30bb24b7f1e9a19b11b55a546434f74e739bb4c271a3e3a80ff4380d49f7adb",
"HOSTNAME": "07338921d076",
"PYTHON_VERSION": "3.12.11",
"REMOTE_CONTAINERS_IPC": "/tmp/vscode-remote-containers-ipc-9cd2ff49-b57e-4e0f-a3e9-e9cce5335134.sock",
"PIPX_BIN_DIR": "/usr/local/py-utils/bin",
"HOME": "/home/vscode",
"LANG": "C.UTF-8",
"LS_COLORS": "",
"NVM_SYMLINK_CURRENT": "true",
"GPG_KEY": "7169605F62C751356D054A26A821E680E5FA6305",
"PYTHON_PATH": "/usr/local/python/current",
"NVM_DIR": "/usr/local/share/nvm",
"REMOTE_CONTAINERS_SOCKETS": "[]",
"USER": "vscode",
"PIPX_HOME": "/usr/local/py-utils",
"DISPLAY": ":0",
"SHLVL": "1",
"NVM_CD_FLAGS": "",
"PROMPT_DIRTRIM": "4",
"SRC_DIR": "/workspaces/InkyPi/src",
"PATH": "/usr/local/python/current/bin:/usr/local/py-utils/bin:/usr/local/jupyter:/usr/local/share/nvm/current/bin:/usr/local/bin:/usr/local/python/current/bin:/usr/local/py-utils/bin:/usr/local/jupyter:/usr/local/share/nvm/current/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/vscode/.local/bin",
"_": "/bin/cat"
}
[85045 ms]
[85045 ms] Start: Run in container: mkdir -p '/home/vscode/.devcontainer' && CONTENT="$(cat '/home/vscode/.devcontainer/.updateContentCommandMarker' 2>/dev/null || echo ENOENT)" && [ "${CONTENT:-2025-11-02T22:31:09.306537509Z}" != '2025-11-02T22:31:09.306537509Z' ] && echo '2025-11-02T22:31:09.306537509Z' > '/home/vscode/.devcontainer/.updateContentCommandMarker'
[85047 ms]
[85047 ms]
[85047 ms] Start: Run in container: mkdir -p '/home/vscode/.devcontainer' && CONTENT="$(cat '/home/vscode/.devcontainer/.postCreateCommandMarker' 2>/dev/null || echo ENOENT)" && [ "${CONTENT:-2025-11-02T22:31:09.306537509Z}" != '2025-11-02T22:31:09.306537509Z' ] && echo '2025-11-02T22:31:09.306537509Z' > '/home/vscode/.devcontainer/.postCreateCommandMarker'
[85048 ms]
[85048 ms]
Running the postCreateCommand from devcontainer.json...

[85049 ms] Start: Run in container: /bin/sh -c sh .devcontainer/post-create.sh
cp: cannot create regular file 'src/config/device.json': Permission denied
[85102 ms] postCreateCommand from devcontainer.json failed with exit code 1. Skipping any further user-provided commands.
[85103 ms] Error: Command failed: /bin/sh -c sh .devcontainer/post-create.sh
[85103 ms] at E (/home/deftdawg/.vscode/extensions/ms-vscode-remote.remote-containers-0.427.0/dist/spec-node/devContainersSpecCLI.js:235:157)
[85103 ms] at async Promise.allSettled (index 0)
[85103 ms] at async b9 (/home/deftdawg/.vscode/extensions/ms-vscode-remote.remote-containers-0.427.0/dist/spec-node/devContainersSpecCLI.js:237:119)
[85103 ms] at async ND (/home/deftdawg/.vscode/extensions/ms-vscode-remote.remote-containers-0.427.0/dist/spec-node/devContainersSpecCLI.js:226:4668)
[85103 ms] at async RD (/home/deftdawg/.vscode/extensions/ms-vscode-remote.remote-containers-0.427.0/dist/spec-node/devContainersSpecCLI.js:226:4013)
[85104 ms] at async MD (/home/deftdawg/.vscode/extensions/ms-vscode-remote.remote-containers-0.427.0/dist/spec-node/devContainersSpecCLI.js:226:3217)
[85104 ms] at async G7 (/home/deftdawg/.vscode/extensions/ms-vscode-remote.remote-containers-0.427.0/dist/spec-node/devContainersSpecCLI.js:668:2746)
[85104 ms] at async b7 (/home/deftdawg/.vscode/extensions/ms-vscode-remote.remote-containers-0.427.0/dist/spec-node/devContainersSpecCLI.js:667:8546)
[85104 ms] at async /home/deftdawg/.vscode/extensions/ms-vscode-remote.remote-containers-0.427.0/dist/spec-node/devContainersSpecCLI.js:484:1188
[85107 ms] Exit code 1
[85107 ms] Command failed: /nix/store/9md1j1rg9j6r0jy7y5qc3kimm0pdfp8a-vscode-1.105.1/lib/vscode/code /home/deftdawg/.vscode/extensions/ms-vscode-remote.remote-containers-0.427.0/dist/spec-node/devContainersSpecCLI.js run-user-commands --user-data-folder /home/deftdawg/.config/Code/User/globalStorage/ms-vscode-remote.remote-containers/data --container-session-data-folder /tmp/devcontainers-ab553066-db0a-4ff3-b362-38c98b3700c51762122597492 --workspace-folder /home/deftdawg/source/InkyPi-DevContainer --id-label devcontainer.local_folder=/home/deftdawg/source/InkyPi-DevContainer --id-label devcontainer.config_file=/home/deftdawg/source/InkyPi-DevContainer/.devcontainer/linux-host/devcontainer.json --container-id 07338921d0762b6849627d112dbf2fbb5914cd7687d6b2240150fd9085eac44a --log-level debug --log-format json --config /home/deftdawg/source/InkyPi-DevContainer/.devcontainer/linux-host/devcontainer.json --default-user-env-probe loginInteractiveShell --skip-non-blocking-commands false --prebuild false --stop-for-personalization true --remote-env REMOTE_CONTAINERS_IPC=/tmp/vscode-remote-containers-ipc-9cd2ff49-b57e-4e0f-a3e9-e9cce5335134.sock --remote-env REMOTE_CONTAINERS=true --mount-workspace-git-root --terminal-columns 272 --terminal-rows 42 --dotfiles-target-path ~/dotfiles
[85738 ms] [22:31:23] Installing extension 'ms-python.python'...
[22:31:23] Installing extension 'ms-python.autopep8'...
[22:31:23] Installing extension 'dbaeumer.vscode-eslint'...
[22:31:23] Installing extension 'ms-python.vscode-pylance'...
[22:31:23] Getting Manifest... ms-python.python
[22:31:23] Getting Manifest... ms-python.autopep8
[22:31:23] Getting Manifest... dbaeumer.vscode-eslint
[22:31:23] Getting Manifest... ms-python.vscode-pylance
[22:31:23] Installing extension: ms-python.python {
isMachineScoped: false,
installPreReleaseVersion: false,
isApplicationScoped: true,
isBuiltin: false,
installGivenVersion: false,
profileLocation: Vr {
scheme: 'file',
authority: '',
path: '/home/vscode/.vscode-server/extensions/extensions.json',
query: '',
fragment: '',
_formatted: 'file:///home/vscode/.vscode-server/extensions/extensions.json',
_fsPath: '/home/vscode/.vscode-server/extensions/extensions.json'
},
productVersion: { version: '1.105.1', date: '2025-10-14T22:33:36.618Z' }
}
[22:31:23] Installing extension: dbaeumer.vscode-eslint {
isMachineScoped: false,
installPreReleaseVersion: false,
isApplicationScoped: true,
isBuiltin: false,
installGivenVersion: false,
profileLocation: Vr {
scheme: 'file',
authority: '',
path: '/home/vscode/.vscode-server/extensions/extensions.json',
query: '',
fragment: '',
_formatted: 'file:///home/vscode/.vscode-server/extensions/extensions.json',
_fsPath: '/home/vscode/.vscode-server/extensions/extensions.json'
},
productVersion: { version: '1.105.1', date: '2025-10-14T22:33:36.618Z' }
}
[22:31:23] Installing extension: ms-python.autopep8 {
isMachineScoped: false,
installPreReleaseVersion: false,
isApplicationScoped: true,
isBuiltin: false,
installGivenVersion: false,
profileLocation: Vr {
scheme: 'file',
authority: '',
path: '/home/vscode/.vscode-server/extensions/extensions.json',
query: '',
fragment: '',
_formatted: 'file:///home/vscode/.vscode-server/extensions/extensions.json',
_fsPath: '/home/vscode/.vscode-server/extensions/extensions.json'
},
productVersion: { version: '1.105.1', date: '2025-10-14T22:33:36.618Z' }
}
[22:31:23] Installing extension: ms-python.vscode-pylance {
isMachineScoped: false,
installPreReleaseVersion: false,
isApplicationScoped: true,
isBuiltin: false,
installGivenVersion: false,
profileLocation: Vr {
scheme: 'file',
authority: '',
path: '/home/vscode/.vscode-server/extensions/extensions.json',
query: '',
fragment: '',
_formatted: 'file:///home/vscode/.vscode-server/extensions/extensions.json',
_fsPath: '/home/vscode/.vscode-server/extensions/extensions.json'
},
productVersion: { version: '1.105.1', date: '2025-10-14T22:33:36.618Z' }
}
[22:31:23] Getting Manifest... ms-python.python
[22:31:23] Getting Manifest... ms-python.vscode-pylance
[22:31:23] Getting Manifest... ms-python.vscode-python-envs
[22:31:23] Getting Manifest... ms-python.debugpy
[22:31:23] Installing extension: ms-python.vscode-python-envs {
isMachineScoped: false,
installPreReleaseVersion: false,
isApplicationScoped: true,
isBuiltin: false,
installGivenVersion: false,
profileLocation: Vr {
scheme: 'file',
authority: '',
path: '/home/vscode/.vscode-server/extensions/extensions.json',
query: '',
fragment: '',
_formatted: 'file:///home/vscode/.vscode-server/extensions/extensions.json',
_fsPath: '/home/vscode/.vscode-server/extensions/extensions.json'
},
productVersion: { version: '1.105.1', date: '2025-10-14T22:33:36.618Z' },
pinned: false,
context: { dependecyOrPackExtensionInstall: true }
}
[22:31:23] Installing extension: ms-python.debugpy {
isMachineScoped: false,
installPreReleaseVersion: false,
isApplicationScoped: true,
isBuiltin: false,
installGivenVersion: false,
profileLocation: Vr {
scheme: 'file',
authority: '',
path: '/home/vscode/.vscode-server/extensions/extensions.json',
query: '',
fragment: '',
_formatted: 'file:///home/vscode/.vscode-server/extensions/extensions.json',
_fsPath: '/home/vscode/.vscode-server/extensions/extensions.json'
},
productVersion: { version: '1.105.1', date: '2025-10-14T22:33:36.618Z' },
pinned: false,
context: { dependecyOrPackExtensionInstall: true }
}
[22:31:23] Getting Manifest... ms-python.vscode-pylance
[22:31:23] Getting Manifest... ms-python.debugpy
[22:31:23] Getting Manifest... ms-python.vscode-python-envs
[87082 ms] [22:31:25] Extension signature verification result for dbaeumer.vscode-eslint: Success. Internal Code: 0. Executed: true. Duration: 1066ms.
[87091 ms] [22:31:25] Extracted extension to file:///home/vscode/.vscode-server/extensions/dbaeumer.vscode-eslint-3.0.16: dbaeumer.vscode-eslint
[87093 ms] [22:31:25] Renamed to /home/vscode/.vscode-server/extensions/dbaeumer.vscode-eslint-3.0.16
[87215 ms] [22:31:25] Extension signature verification result for ms-python.autopep8: Success. Internal Code: 0. Executed: true. Duration: 997ms.
[87260 ms] [22:31:25] Extracted extension to file:///home/vscode/.vscode-server/extensions/ms-python.autopep8-2025.2.0: ms-python.autopep8
[87270 ms] [22:31:25] Renamed to /home/vscode/.vscode-server/extensions/ms-python.autopep8-2025.2.0
[87745 ms] [22:31:25] Downloaded extension to file:///home/vscode/.vscode-server/extensionsCache/c10f1ce0-c181-4a57-8e36-25995606744a
[87747 ms] [22:31:25] Installing extension: github.copilot-chat {
isApplicationScoped: false,
profileLocation: Vr {
scheme: 'file',
authority: '',
path: '/home/vscode/.vscode-server/extensions/extensions.json',
query: '',
fragment: '',
_formatted: 'file:///home/vscode/.vscode-server/extensions/extensions.json',
_fsPath: '/home/vscode/.vscode-server/extensions/extensions.json'
},
productVersion: { version: '1.105.1', date: '2025-10-14T22:33:36.618Z' }
}
[87841 ms] [22:31:25] Getting Manifest... github.copilot
[88243 ms] [22:31:26] Installing extension: github.copilot {
isApplicationScoped: false,
profileLocation: Vr {
scheme: 'file',
authority: '',
path: '/home/vscode/.vscode-server/extensions/extensions.json',
query: '',
fragment: '',
_formatted: 'file:///home/vscode/.vscode-server/extensions/extensions.json',
_fsPath: '/home/vscode/.vscode-server/extensions/extensions.json'
},
productVersion: { version: '1.105.1', date: '2025-10-14T22:33:36.618Z' },
pinned: false,
installGivenVersion: false,
context: { dependecyOrPackExtensionInstall: true }
}
[88345 ms] [22:31:26] Extracted extension to file:///home/vscode/.vscode-server/extensions/github.copilot-chat-0.32.4: github.copilot-chat
[88349 ms] [22:31:26] Renamed to /home/vscode/.vscode-server/extensions/github.copilot-chat-0.32.4
[88582 ms] [22:31:26] Extension signature verification result for ms-python.debugpy: Success. Internal Code: 0. Executed: true. Duration: 302ms.
[88697 ms] [22:31:26] Extracted extension to file:///home/vscode/.vscode-server/extensions/ms-python.debugpy-2025.14.1-linux-x64: ms-python.debugpy
[88706 ms] [22:31:26] Renamed to /home/vscode/.vscode-server/extensions/ms-python.debugpy-2025.14.1-linux-x64
[89768 ms] [22:31:27] Extension signature verification result for ms-python.vscode-python-envs: Success. Internal Code: 0. Executed: true. Duration: 291ms.
[89821 ms] [22:31:27] Extracted extension to file:///home/vscode/.vscode-server/extensions/ms-python.vscode-python-envs-1.10.0-linux-x64: ms-python.vscode-python-envs
[89823 ms] [22:31:27] Renamed to /home/vscode/.vscode-server/extensions/ms-python.vscode-python-envs-1.10.0-linux-x64
[90160 ms] [22:31:28] Downloaded extension to file:///home/vscode/.vscode-server/extensionsCache/65a2662e-9e51-4420-a829-6d0bfa744f20
[90162 ms] [22:31:28] Installing extension: github.copilot {
isApplicationScoped: false,
profileLocation: Vr {
scheme: 'file',
authority: '',
path: '/home/vscode/.vscode-server/extensions/extensions.json',
query: '',
fragment: '',
_formatted: 'file:///home/vscode/.vscode-server/extensions/extensions.json',
_fsPath: '/home/vscode/.vscode-server/extensions/extensions.json'
},
productVersion: { version: '1.105.1', date: '2025-10-14T22:33:36.618Z' }
}
[90207 ms] [22:31:28] Getting Manifest... github.copilot-chat
[90626 ms] [22:31:28] Extracted extension to file:///home/vscode/.vscode-server/extensions/github.copilot-1.388.0: github.copilot
[90637 ms] [22:31:28] Renamed to /home/vscode/.vscode-server/extensions/github.copilot-1.388.0
[90645 ms] [22:31:28] Extension installed successfully: github.copilot file:///home/vscode/.vscode-server/extensions/extensions.json
[91013 ms] [22:31:29] Extension signature verification result for ms-python.python: Success. Internal Code: 0. Executed: true. Duration: 302ms.
[91370 ms] [22:31:29] Extracted extension to file:///home/vscode/.vscode-server/extensions/ms-python.python-2025.16.0-linux-x64: ms-python.python
[91398 ms] [22:31:29] Renamed to /home/vscode/.vscode-server/extensions/ms-python.python-2025.16.0-linux-x64
[91923 ms] [22:31:29] Extension signature verification result for ms-python.vscode-pylance: Success. Internal Code: 0. Executed: true. Duration: 335ms.
[92547 ms] [22:31:30] Extension signature verification result for github.copilot: Success. Internal Code: 0. Executed: true. Duration: 546ms.
[92559 ms] [22:31:30] Extension installed successfully: github.copilot-chat file:///home/vscode/.vscode-server/extensions/extensions.json
[22:31:30] Extension installed successfully: github.copilot file:///home/vscode/.vscode-server/extensions/extensions.json
[92733 ms] [22:31:30] Extracted extension to file:///home/vscode/.vscode-server/extensions/ms-python.vscode-pylance-2025.9.1: ms-python.vscode-pylance
[92823 ms] [22:31:30] Renamed to /home/vscode/.vscode-server/extensions/ms-python.vscode-pylance-2025.9.1
[92832 ms] [22:31:30] Extension installed successfully: dbaeumer.vscode-eslint file:///home/vscode/.vscode-server/extensions/extensions.json
[22:31:30] Extension installed successfully: ms-python.autopep8 file:///home/vscode/.vscode-server/extensions/extensions.json
[22:31:30] Extension installed successfully: ms-python.debugpy file:///home/vscode/.vscode-server/extensions/extensions.json
[22:31:30] Extension installed successfully: ms-python.vscode-python-envs file:///home/vscode/.vscode-server/extensions/extensions.json
[22:31:30] Extension installed successfully: ms-python.python file:///home/vscode/.vscode-server/extensions/extensions.json
[22:31:30] Extension installed successfully: ms-python.vscode-pylance file:///home/vscode/.vscode-server/extensions/extensions.json
[92834 ms] [22:31:30] Extension 'dbaeumer.vscode-eslint' v3.0.16 was successfully installed.
[22:31:30] Extension 'ms-python.autopep8' v2025.2.0 was successfully installed.
[22:31:30] Extension 'ms-python.debugpy' v2025.14.1 was successfully installed.
[22:31:30] Extension 'ms-python.vscode-python-envs' v1.10.0 was successfully installed.
[22:31:30] Extension 'ms-python.python' v2025.16.0 was successfully installed.
[22:31:30] Extension 'ms-python.vscode-pylance' v2025.9.1 was successfully installed.
[94714 ms] Start: Run in container: mkdir -p '/vscode/vscode-server/extensionsCache' && cd '/home/vscode/.vscode-server/extensionsCache' && cp 'dbaeumer.vscode-eslint-3.0.16' 'github.copilot-1.388.0' 'ms-python.autopep8-2025.2.0' 'ms-python.debugpy-2025.14.1-linux-x64' 'ms-python.python-2025.16.0-linux-x64' 'ms-python.vscode-pylance-2025.9.1' 'ms-python.vscode-python-envs-1.10.0-linux-x64' '/vscode/vscode-server/extensionsCache'
[94735 ms]
[94735 ms]
[94735 ms] Start: Run in container: cd '/vscode/vscode-server/extensionsCache' && ls -t | tail -n +500 | xargs rm -f
[94737 ms]
[94737 ms]
[130161 ms] Port forwarding connection from 43702 > 42935 > 42935 in the container.
[130161 ms] Start: Run in container: /home/vscode/.vscode-server/bin/7d842fb85a0275a4a8e4d7e040d2625abbf7f084/node -e
[130213 ms] Port forwarding 43702 > 42935 > 42935 stderr: Connection established
[136216 ms] Port forwarding 43702 > 42935 > 42935 stderr: Remote close
[136220 ms] Port forwarding 43702 > 42935 > 42935 terminated with code 0 and signal null.

@deftdawg
Copy link
Contributor

deftdawg commented Nov 3, 2025

Some progress... quick notes:

  • Ran bash install/install.sh inside the container to generate /src/config/device.json, copied the file outside the container and set mock:true
  • The docker file needs to be bumped to FROM mcr.microsoft.com/devcontainers/python:3.12-bookworm to have chrome-headless-shell available, needed for screenshot. Had to manually install it, not sure why since it's listed in the debian-requirements.txt
  • I had to run as sudo to get DISPLAY binding to X11/Wayland to work, I effectively have to do this or I get a TCL cannot bind display :0 error (I'm on a NixOS/Wayland/KDE6 host) - @Ifouldm you might give this a shot:
sudo pip install -r install/requirements.txt
sudo SRC_DIR=$(pwd)/src /usr/local/bin/python src/inkypi.py -s --type impressions
  • I made a bunch of changes to linux-host/devcontainer.json, not sure if they actually helped or not since I couldn't get rid of the sudo requirement:
.devcontainer/linux-host/devcontainer.json patch
diff --git a/.devcontainer/linux-host/devcontainer.json b/.devcontainer/linux-host/devcontainer.json
index 132e78d..b324862 100644
--- a/.devcontainer/linux-host/devcontainer.json
+++ b/.devcontainer/linux-host/devcontainer.json
@@ -2,20 +2,34 @@
 // README at: https://github.com/devcontainers/templates/tree/main/src/python
 {
     "name": "Linux Host - Python 3",
-    "build": { "dockerfile": "../Dockerfile" },
+    "build": { 
+        "dockerfile": "../Dockerfile",
+        "args": {
+            "USER_UID": "1000",
+            "USER_GID": "1000"
+        }
+    },
     "postCreateCommand": "sh .devcontainer/post-create.sh",
-    
+
     "containerEnv": {
         "SRC_DIR": "/workspaces/InkyPi/src",
-        "DISPLAY": "${localEnv:DISPLAY}"
+        "DISPLAY": "${localEnv:DISPLAY}",
+        "WAYLAND_DISPLAY": "${localEnv:WAYLAND_DISPLAY}",
+        "XDG_RUNTIME_DIR": "/run/user/1000"
     },
     
-    // You might have to enable window redirect on your host using the command: `xhost +`
-    
     "mounts": [
-        "source=/tmp/.X11-unix,target=/tmp/.X11-unix,type=bind"
+        "source=/tmp/.X11-unix,target=/tmp/.X11-unix,type=bind",
+        "source=/run/user/1000,target=/run/user/1000,type=bind"
     ],
     
+    "runArgs": [
+        "--user=1000:1000",
+        "--network=host"
+    ],
+    
+    "remoteUser": "vscode",
+    
     // add vscode settings
     "customizations": {
         "vscode": {
@@ -28,8 +42,7 @@
                 "python.testing.promptToConfigure": false
             }
         }
-    },
-    
+    }
     // Features to add to the dev container. More info: https://containers.dev/features.
     // "features": {},

@doofmars
Copy link
Contributor Author

doofmars commented Nov 3, 2025

@deftdawg

Is it expected that one has done install/install.sh -W <device> before starting this (so a device.json gets generated)?

The .devcontainer/post-create.sh should handle the config file creation during setup.

While I worked on this change I ran into the dilemma of the display binding and overall architecture. This is fine if you develop on real hardware but not if you want to virtualize everything.
For my task of creating a small plugin, while not having to wait on the hardware updates, this mocking approach was sufficient. For your use-case where you might want to look into how to avoid the library a bit more.

not sure why since it's listed in the debian-requirements.txt

Might have been missed in the post-create file, I had some issues with chrome-headless-shell on my end but I did not need this feature.

@deftdawg
Copy link
Contributor

Posted my devbox PR (and 4 other PRs) ... It kind of solves this problem without the devcontainer using Nix packages in the background.

I'd say the only remaining benefit to using a devcontainer (which devbox can make via devbox gen devcontainer btw) is more for security concerns since the chromium instances that render everything do so with no sandbox.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants