commit 906ff74f534d5a91e1fb73e7d1f9e445f0556906 Author: Alex Davies Date: Mon Jan 22 15:42:59 2024 -0400 Initial commit diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..9730fd3 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,75 @@ +FROM nestybox/ubuntu-focal-systemd + +ENV ROS_DISTRO noetic +ENV DEBIAN_FRONTEND noninteractive + +RUN apt-get update +RUN apt-get install curl gnupg2 software-properties-common -y + +RUN sh -c 'curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | apt-key add -' +RUN sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' +RUN sh -c 'curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -' +RUN sh -c 'add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"' +# RUN add-apt-repository ppa:flatpak/stable + +#Make sure we're running latest gazebo11, since px4io/px4-dev-ros-noetic does. +RUN sh -c "curl -sSL http://get.gazebosim.org | sh" + +RUN apt-get update +RUN apt-get install ros-$ROS_DISTRO-desktop-full -y +RUN apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y +RUN apt-get install ros-$ROS_DISTRO-gazebo-ros-pkgs ros-$ROS_DISTRO-gazebo-ros-control gazebo11 -y +RUN apt-get install ros-$ROS_DISTRO-mavros -y +RUN apt-get install lxqt-core -y +RUN apt-get install vim nano htop git -y +# RUN apt-get install flatpak xdg-desktop-portal-kde -y +# RUN flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo +# RUN flatpak install flathub org.mozilla.firefox + +RUN apt-get remove gnome-shell -y +RUN apt-get autoremove -y + +RUN wget https://github.com/kasmtech/KasmVNC/releases/download/v1.2.0/kasmvncserver_focal_1.2.0_amd64.deb +RUN apt-get install ./kasmvncserver_focal_1.2.0_amd64.deb --yes +RUN rm ./kasmvncserver_focal_1.2.0_amd64.deb + +COPY ./kasmvnc.yaml /etc/kasmvnc/kasmvnc.yaml +COPY ./kasmvnc.service /etc/systemd/system/ +RUN systemctl enable kasmvnc + +#Custom user skel overrides. We're not going to be too worried about permissions for this one. +COPY ./skel /etc/skel/ + +#Delete default user and replace it with our own +RUN userdel -r admin + +ARG USERNAME=spiri +ARG USER_UID=1000 +ARG USER_GID=$USER_UID + +RUN groupadd --gid $USER_GID $USERNAME +RUN useradd --uid $USER_UID --gid $USER_GID --create-home --shell /bin/bash $USERNAME +RUN usermod -aG sudo,ssl-cert $USERNAME +RUN echo "$USERNAME ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/$USERNAME +RUN chmod 0440 /etc/sudoers.d/$USERNAME +RUN echo "${USERNAME}:spiri-friend" | chpasswd + +COPY --chown=$USER_UID:$USER_GID ./kasmpasswd /home/$USERNAME/.kasmpasswd +COPY --chown=$USER_UID:$USER_GID --chmod=0755 ./xstartup /home/$USERNAME/.vnc/xstartup + +COPY ./background.png /opt/spiri-wallpaper.png +run sed -i 's|/usr/share/lxqt/themes/debian/wallpaper.svg|/opt/spiri-wallpaper.png|' /etc/xdg/pcmanfm-qt/lxqt/settings.conf +#Remove transparency it can make lead to compression artifacts +run sed -i 's|TerminalTransparency=10|/TerminalTransparency=0|' /etc/xdg/qterminal.org/qterminal.ini + +#Copy in our custom gazebo resources +COPY --link --from=git.spirirobotics.com/spiri/gazebo-resources:latest /models /usr/share/gazebo-11/models/ +COPY --link --from=git.spirirobotics.com/spiri/gazebo-resources:latest /worlds /usr/share/gazebo-11/worlds/ +COPY --link --from=git.spirirobotics.com/spiri/gazebo-resources:latest /plugins /usr/lib/x86_64-linux-gnu/gazebo-11/plugins + +# USER $USERNAME +# #Install nix, for easy mixin packages. Homebrew would also work... +# RUN curl -L https://nixos.org/nix/install | sh -s -- --no-daemon +# COPY ./nix.conf /etc/nix/nix.conf +# # RUN nix flake init +# USER 0 diff --git a/README.md b/README.md new file mode 100644 index 0000000..12b2dfc --- /dev/null +++ b/README.md @@ -0,0 +1,8 @@ + +Make sure sysbox is installed and run + +```sh + docker run --runtime=sysbox-runc -it spiri-sdk-desktop + ``` + +Navigate to http://localhost:8466, and log in using the username `spiri` and the password `spiri-friend` diff --git a/background.png b/background.png new file mode 100644 index 0000000..c765125 Binary files /dev/null and b/background.png differ diff --git a/kasmpasswd b/kasmpasswd new file mode 100644 index 0000000..85c8c91 --- /dev/null +++ b/kasmpasswd @@ -0,0 +1 @@ +spiri:$5$kasm$bc2Fwutowq1kSiQCv2rNYVgn8.bJeARYMydYCvU1WKC:wo diff --git a/kasmvnc.service b/kasmvnc.service new file mode 100644 index 0000000..b2c5f7a --- /dev/null +++ b/kasmvnc.service @@ -0,0 +1,17 @@ +[Unit] +Description=KasmVNC +After=network.target + +[Service] +Type=simple +ExecStart=kasmvncserver :23 -fg -select-de LXQT +ExectStop kasmvncserver -kill :23 +User=spiri +Group=spiri + +Restart=on-failure +RestartSec=3 + +[Install] +WantedBy=default.target + diff --git a/kasmvnc.yaml b/kasmvnc.yaml new file mode 100644 index 0000000..0bc7825 --- /dev/null +++ b/kasmvnc.yaml @@ -0,0 +1,131 @@ +desktop: + resolution: + width: 1024 + height: 768 + allow_resize: true + pixel_depth: 24 + gpu: + hw3d: false + drinode: /dev/dri/renderD128 + +network: + protocol: http + interface: 0.0.0.0 + websocket_port: auto + use_ipv4: true + use_ipv6: true + udp: + public_ip: auto + port: auto + stun_server: auto + ssl: + pem_certificate: /etc/ssl/certs/ssl-cert-snakeoil.pem + pem_key: /etc/ssl/private/ssl-cert-snakeoil.key + require_ssl: false + +user_session: + new_session_disconnects_existing_exclusive_session: false + concurrent_connections_prompt: false + concurrent_connections_prompt_timeout: 10 + idle_timeout: never + +keyboard: + remap_keys: + ignore_numlock: false + raw_keyboard: false + +pointer: + enabled: true + +runtime_configuration: + allow_client_to_override_kasm_server_settings: true + allow_override_standard_vnc_server_settings: true + allow_override_list: + - pointer.enabled + - data_loss_prevention.clipboard.server_to_client.enabled + - data_loss_prevention.clipboard.client_to_server.enabled + - data_loss_prevention.clipboard.server_to_client.primary_clipboard_enabled + +logging: + log_writer_name: all + log_dest: logfile + level: 30 + +security: + brute_force_protection: + blacklist_threshold: 5 + blacklist_timeout: 10 + +data_loss_prevention: + visible_region: + # top: 10 + # left: 10 + # right: 40 + # bottom: 40 + concealed_region: + allow_click_down: false + allow_click_release: false + clipboard: + delay_between_operations: none + allow_mimetypes: + - chromium/x-web-custom-data + - text/html + - image/png + server_to_client: + enabled: true + size: unlimited + primary_clipboard_enabled: false + client_to_server: + enabled: true + size: unlimited + keyboard: + enabled: true + rate_limit: unlimited + logging: + level: off + +encoding: + max_frame_rate: 60 + full_frame_updates: none + rect_encoding_mode: + min_quality: 7 + max_quality: 8 + consider_lossless_quality: 10 + rectangle_compress_threads: auto + + video_encoding_mode: + jpeg_quality: -1 + webp_quality: -1 + max_resolution: + width: 1920 + height: 1080 + enter_video_encoding_mode: + time_threshold: 5 + area_threshold: 45% + exit_video_encoding_mode: + time_threshold: 3 + logging: + level: off + scaling_algorithm: progressive_bilinear + + compare_framebuffer: auto + zrle_zlib_level: auto + hextile_improved_compression: true + +server: + http: + headers: + - Cross-Origin-Embedder-Policy=require-corp + - Cross-Origin-Opener-Policy=same-origin + httpd_directory: /usr/share/kasmvnc/www + advanced: + x_font_path: auto + kasm_password_file: ${HOME}/.kasmpasswd + x_authority_file: auto + auto_shutdown: + no_user_session_timeout: never + active_user_session_timeout: never + inactive_user_session_timeout: never + +command_line: + prompt: true diff --git a/nix.conf b/nix.conf new file mode 100644 index 0000000..c7d7291 --- /dev/null +++ b/nix.conf @@ -0,0 +1 @@ +experimental-features = nix-command flakes diff --git a/xstartup b/xstartup new file mode 100644 index 0000000..1d774a2 --- /dev/null +++ b/xstartup @@ -0,0 +1,3 @@ +#!/bin/sh +export QT_X11_NO_MITSHM=1 +exec startlxqt