Skip to content

3.2.1 Cubes Setup

papo edited this page Feb 29, 2024 · 2 revisions

Setup Cube (Operating System)

(Author: Patrick Pogscheba, date: 12/2023)

Fedora 38

install from ISO

Install ... https://ostechnix.com/install-fedora/

user: pc
pw: 1234			# or use a better one ?

Update

sudo dnf update

Usersettings

gsettings set org.gnome.desktop.screensaver lock-enabled false

in UI:

Energy settings: disable display lock, turn on never shutdown

enable dark theme

Automatic Login

sudo vi /etc/gdm/custom.conf

######## CONTENT
[daemon]
# Uncomment the line below to force the login screen to use Xorg
#WaylandEnable=false
AutomaticLoginEnable=true
AutomaticLogin=pc 

RDP (Remote desktop)

gsettings set org.gnome.desktop.remote-desktop.rdp enable true

in UI -> settings -> Sharing: set PW to 1234

Pakete installieren

Cockpit

sudo dnf install --assumeyes cockpit
sudo systemctl enable --now cockpit.socket

access on port 9090

Docker

sudo dnf -y install --assumeyes dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo

sudo dnf install --assumeyes docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

sudo systemctl start docker
sudo systemctl enable docker

sudo usermod -aG docker $USER

add insecure registry (registry on server)

sudo vi /etc/docker/daemon.json

add

{ "insecure-registries" : [ "192.168.111.1:5001" ] }

Alias (for different docker compose versions)

in .bashrc

alias docker-compose='docker compose'

Remote access (optional, easier with cockpit)

SSH

  1. SSH-Ordner anlegen:

    mkdir ~/.ssh 
    chmod 700 ~/.ssh -R
    
  2. SSH-Public-Key einfügen

    vi ~/.ssh/authorized_keys
    
  3. activate SSH (UI -> Remote access)

RemoteDesktop

UI -> Settings-> Remote access-> screen sharing: on

set PW: 1234

USB einrichten (static mapping for sensorboard)

map uP to /dev/qtpy

edit /etc/udev/rules.d/10-qtpy.rules:

sudo vi /etc/udev/rules.d/10-qtpy.rules
ACTION=="add", ATTRS{idVendor}=="239a", ATTRS{idProduct}=="8111", SYMLINK+="qtpy"

grant access to $USER

sudo usermod -a -G dialout $USER

Syncthing

https://theselfhostingblog.com/posts/how-to-set-up-a-headless-syncthing-network/

https://discussion.fedoraproject.org/t/how-to-set-up-syncthing/74101

sudo dnf install --assumeyes syncthing
sudo systemctl enable syncthing@pc.service
sudo systemctl restart syncthing@pc.service

# change ui access to 0.0.0.0 in ~/.config/syncthing/config.xml

sudo systemctl restart syncthing@pc.service

Einstellungen: Autoaccept, Folder, etc

Autostandby etc deaktivieren

sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

sudo -u gdm dbus-run-session gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-timeout 0
sudo -u gdm dbus-run-session gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-battery-timeout 0

Screen (Serial)

sudo dnf install screen
screen /dev/qtpy 115200

Overview@Startup deaktivieren

https://extensions.gnome.org/extension/4099/no-overview/

installieren

Gnome-Extensions installieren (UI)

-> aktivieren

Serial Dummy Device

sudo dnf install socat
sudo socat UDP:127.0.0.1:5001,bind=127.0.0.1:5000 \
    PTY,link=/dev/qtpy,raw,echo=0,waitslave

Mono-Audio

https://askubuntu.com/questions/1439652/how-can-i-downmix-stereo-audio-output-to-mono-in-pipewire-on-22-10

in /home/pc/.config/pipewire/pipewire.conf.d/mono-playback-device.conf

context.modules = [
    { name = libpipewire-module-loopback
        args = {
            node.description = "Mono Playback Device"
            capture.props = {
                node.name      = "mono_output"
                media.class    = "Audio/Sink"
                audio.position = [ MONO ]
            }
            playback.props = {
                node.name      = "playback.mono_output"
                audio.position = [ MONO ]
                node.passive   = true
            }
        }
    }
]

dann

systemctl --user restart pipewire{,-pulse}.{service,socket}

Skripte

init.sh

#!/bin/bash

CUBE_ID="${1:-cube-tmpl}"

echo "Initializing cube '$CUBE_ID'"

hostnamectl hostname $CUBE_ID

echo "Setting default volume"
wpctl set-volume 48 70%

echo "Starting syncthing"
sudo systemctl start syncthing@pc
sudo systemctl enable syncthing@pc

echo "@User: go to server syncthing and add cube and folders to sync"
# Waiting for sync to finish
until [ -f /opt/puzzlecubes/client/docker-compose.yaml ]
do
     sleep 5
done

echo "Creating ignore file for client-sync"
cat >/opt/puzzlecubes/client/.stignore << EOL
.env
platformio
EOL

# echo "Client Service found.. Starting Docker-Composition"

echo "HOSTNAME=${CUBE_ID}" > /opt/puzzlecubes/client/.env

# install sensorboard ... could last very long
docker compose -f /opt/puzzlecubes/client/sensorboard/docker-compose.yaml up 
docker compose -f /opt/puzzlecubes/client/docker-compose.yaml up -d

prepare.sh

#!/bin/bash

rm ~/.config/syncthing/key.pem
rm ~/.config/syncthing/cert.pem

Disable power standby etc

sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
sudo -u gdm dbus-run-session gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-timeout 0
sudo -u gdm dbus-run-session gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-battery-timeout 0

Disable Banner notifications

 gsettings set org.gnome.desktop.notifications show-banners false
gsettings set org.gnome.software allow-updates false

Audio min volume

   
wpctl set-volume 48 70%

Maussteuerung

https://github.com/ReimuNotMoe/ydotool/issues/47

ydotools

  • move and click
sudo dnf install ydotool
sudo systemctl enable ydotoolsd

Links

ln -s /opt/puzzlecubes ~/puzzlecubes

Everything described here is already done and proovided in a OS image which can be deployed with clonezilla on each cube for further setup (e.g. setting cubeID) described under workflows.

Important: the init.sh script described here is a new version which is not on the image right now... use the guide under workflows...

Sensorboard

static device Name /dev/qtpy

sudo vi /etc/udev/rules.d/10-qtpy.rules 

#INSERT
ACTION=="add", ATTRS{idVendor}=="239a", ATTRS{idProduct}=="8111", SYMLINK+="qtpy"

Clone this wiki locally