Systembeskrivelse KHM Midgardr

I Midgardr-utstillingen på KHM, rom 390, er det to Pixel Streaming-installasjoner. Det er to 3d-objekter - slededrag og dyrehode - som kan roteres, zoomes inn på og tiltes for å kunne undersøkes av publikum på nært hold. NB! 3D-modellene kræsjer periodevis med feilmelding i syslog: "errorString CTX SWITCH TIMEOUT, Info 0x2cc017". Det jobbes med utbedring av 3D-modellene, men foreløpig restarter de automatisk ved kræsj. Detaljer rundt restart dersom autostart ikke skulle fungere under.

Enheter i systemet:

I utstillingen, 3. etasje, rom 390:
2x Pixilab-player, installert på Asus NUC

Kjører siste versjon av Pixilab Player
2x Samsung touchskjerm

I 4. etasje, "teknisk rom", rom 420
2x Asus ROG gaming-nuc, disse er:

se06-04-420-3dnuc02 - dyrehode
Kjører en lettere modifisert utgave av Pixel Streaming signalling server (se egen installasjonsguide for skreddersøm) og 3d-prosjektet ~/DyrehodeV2/MV_Dyrehode_16k/Binaries/Linux/MV_Dyrehode_16k-Linux-Shipping - som kjøres via script MV_Dyrehode_16k.sh

Dette scriptet genereres som standard, men inneholder to tillegg, et for å kjøre prosjektet med Pixel Streaming-plugin på og henvisning til localhost for server, og et for å loggføre crash med timestamp i filen ~/DyrehodeV2/MV_Dyrehode_16k/Linux/crash_log.txt. Scriptet ser ut som dette:

#!/bin/sh


export XDG_RUNTIME_DIR=/run/user/1000


export LANG=en_GB.utf8

export LC_ALL=en_GB.utf8


export DISPLAY=:0


export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin


UE_TRUE_SCRIPT_NAME=$(echo \"$0\" | xargs readlink -f)

UE_PROJECT_ROOT=$(dirname "$UE_TRUE_SCRIPT_NAME")

chmod +x "$UE_PROJECT_ROOT/MV_Dyrehode_16k/Binaries/Linux/MV_Dyrehode_16k-Linux-Shipping"

"$UE_PROJECT_ROOT/MV_Dyrehode_16k/Binaries/Linux/MV_Dyrehode_16k-Linux-Shipping" MV_Dyrehode_16k "$@" -RenderOffScreen -PixelStreamingUrl=ws://127.0.0.1:8888


LOG_FILE="$UE_PROJECT_ROOT/crash_log.txt"

if [ -f "$LOG_FILE" ]; then

    CRASH_COUNT=$(grep -c "Crash #" "$LOG_FILE")

else

    CRASH_COUNT=0

    touch "$LOG_FILE" #lager ny loggfil om den ikke finnes

fi


while true; do

    "$UE_PROJECT_ROOT/MV_Dyrehode_16k/Binaries/Linux/MV_Dyrehode_16k-Linux-Shipping" MV_Dyrehode_16k "$@" -PixelStreamingUrl=ws://127.0.0.1:8888 #sørger for å starte opp igjen dersom dyrehodet kneler

        

    CRASH_COUNT=$((CRASH_COUNT + 1)) #teller kræsj

    

    # legger til dato og klokkeslett

    TIMESTAMP=$(date +"%Y-%m-%d %H:%M:%S")

    

    # loggfører crash til fil og rapporterer til shell

    echo "Crash #$CRASH_COUNT at $TIMESTAMP" >> "$LOG_FILE"

    echo "MV_Dyrehode_16k-Linux-Shipping har avsluttet. Restarter..."

    sleep 2  #venter i 2 sekunder med å loope script og restarte

done


I tilfelle feil (svart skjerm):

ssh khm-uio@se06-04-420-3dnuc02-khm.uio.no - passord i Vault under /SE06-KHM/
finn PID til MV_Dyrehode_16k (med f. eks kommando ps -e)  
kjør kommando kill <pid>
Prosessen starter av seg selv.


se06-04-420-3dnuc01 - slededrag

Kjører en lettere modifisert utgave av Pixel Streaming signalling server (se egen installasjonsguide for skreddersøm) og 3d-prosjektet ~/SlededragV2/ModelViewerTouchHorizontal/Linux/ModelViewerTouch/Binaries/Linux/ModelViewerTouch-Linux-Shiupping (executable) - som kjøres via script ~/SlededragV2/ModelViewerTouchHorizontal/Linux/ModelViewerTouch/ModelViewerTouch.sh

Dette scriptet genereres som standard, men inneholder noen modifiseringer, et for å kjøre prosjektet med Pixel Streaming-plugin på og henvisning til localhost for server, og et for å loggføre crash med timestamp i filen ~/SlededragV2/ModelViewerTouchHorizontal/Linux/crash_log.txt, samt for å kunne avsluttes hver kveld og startes opp igjen på morgenen med cron. Scriptet ser ut som dette:

#!/bin/sh


export XDG_RUNTIME_DIR=/run/user/1000

export LANG=en_GB.utf8

export LC_ALL=en_GB.utf8


export DISPLAY=:1


export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin


UE_TRUE_SCRIPT_NAME=$(echo \"$0\" | xargs readlink -f)

UE_PROJECT_ROOT=$(dirname "$UE_TRUE_SCRIPT_NAME")

chmod +x "$UE_PROJECT_ROOT/ModelViewerTouch/Binaries/Linux/ModelViewerTouch-Linux-Shipping"

"$UE_PROJECT_ROOT/ModelViewerTouch/Binaries/Linux/ModelViewerTouch-Linux-Shipping" ModelViewerTouch "$@" -RenderOffScreen -PixelStreamingUrl=ws://127.0.0.1:8888


LOG_FILE="$UE_PROJECT_ROOT/crash_log.txt"

if [ -f "$LOG_FILE" ]; then

    CRASH_COUNT=$(grep -c "Crash #" "$LOG_FILE")

else

    CRASH_COUNT=0

    touch "$LOG_FILE" #lager en ny loggfil om den ikke finnes

fi


while true; do

    "$UE_PROJECT_ROOT/ModelViewerTouch/Binaries/Linux/ModelViewerTouch-Linux-Shipping" ModelViewerTouch "$@" -PixelStreamingUrl=ws://127.0.0.1:8888

        # sørger for at prosessen restartes dersom crash

    CRASH_COUNT=$((CRASH_COUNT + 1)) #legger til nummerert crash

    

    # får timestamp til logg

    TIMESTAMP=$(date +"%Y-%m-%d %H:%M:%S")

    

    # loggfører crash til fil og rapporterer til shell

    echo "Crash #$CRASH_COUNT at $TIMESTAMP" >> "$LOG_FILE"

    echo "ModelViewerTouch-Linux-Shipping har avsluttet. Restarter..."

    sleep 2 #venter i 2 sekunder med å loope script og restarte slededrag

done


I tilfelle feil (svart skjerm):

ssh khm-uio@se06-04-420-3dnuc01-khm.uio.no - passord i Vault under /SE06-KHM/
finn PID til ModelViewerTouch (med f. eks kommando ps -e)  
kjør kommando kill <pid>
Prosessen starter av seg selv.

Maskinene kjører Ubuntu Desktop med Pixel Streaming-server og standalone Unreal Engine-prosjekt. Disse genererer websider som lastes inn av NUC via to blocker i Pixilab. Merk: Det er ikke plug-and-play å sette disse opp med pixel streaming-server, da pixel streaming som standard krever internettilkobling, og disse maskinene ikke skal være på nett. Følg derfor setup-guide om du trenger å sette disse opp på nytt.

Begge maskinene har SSH, login-detaljer finnes i Vault.
En del web-baserte tjenester er slått av:
apt-daily-upgrade.timer
apt-daily.timer

Alle involverte maskiner er på klientnett 1304.
 

Av Ståle Fossheim
Publisert 20. juni 2025 11:13 - Sist endret 8. aug. 2025 11:00