Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
438f897b92 | ||
|
|
a700670efc |
No files matched your search
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
[submodule "qt-migration-legatus"]
|
[submodule "qt-migration-legatus"]
|
||||||
path = qt-migration-legatus
|
path = qt-migration-legatus
|
||||||
url = git@devel:lifemaps/qt-migration-legatus.git
|
url = git@devel:lifemaps/qt-migration-legatus.git
|
||||||
branch = story/release-at-16-oct-2026
|
branch = feature/Re-implement-XmlPatterns
|
||||||
[submodule "rpmbuild"]
|
[submodule "rpmbuild"]
|
||||||
path = rpmbuild
|
path = rpmbuild
|
||||||
url = git@devel:lifemaps/rpmbuild.git
|
url = git@devel:lifemaps/rpmbuild.git
|
||||||
|
|||||||
Vendored
+3
-3
@@ -42,15 +42,15 @@ public:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
explicit Fehler (const std::string& what_arg);
|
explicit Fehler (const std::string& what_arg);
|
||||||
virtual ~Fehler () throw();
|
virtual ~Fehler () noexcept;
|
||||||
virtual const char* what() const throw();
|
virtual const char* what() const noexcept;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string fehler_string;
|
std::string fehler_string;
|
||||||
};
|
};
|
||||||
|
|
||||||
Schusstafel (std::string pfad, std::string munitionsart, std::string suffix)
|
Schusstafel (std::string pfad, std::string munitionsart, std::string suffix)
|
||||||
throw (Fehler);
|
noexcept(false);
|
||||||
|
|
||||||
~Schusstafel () {};
|
~Schusstafel () {};
|
||||||
|
|
||||||
|
|||||||
+1
-1
Submodule qt-migration-legatus updated: 6d96d72592...d327c66c46.
@@ -0,0 +1,47 @@
|
|||||||
|
# Remote X11 Docker Forwarding for Qt6 Pipeline
|
||||||
|
|
||||||
|
Diese Skripte automatisieren das Durchreichen von grafischen Anwendungen (GUI) aus einem Docker-Container über eine **SSH-Verbindung** innerhalb einer **GNU screen-Session**. Sie lösen die typischen Probleme mit X11-Cookies (`.Xauthority`) und wechselnden Display-Nummern.
|
||||||
|
|
||||||
|
## 🚀 Voraussetzungen
|
||||||
|
|
||||||
|
1. **Lokal:** Ein laufender X-Server (Linux Desktop, XQuartz auf macOS oder VcXsrv/Xming auf Windows).
|
||||||
|
2. **SSH-Verbindung:** Verbindung zum Server zwingend mit X11-Weiterleitung aufbauen:
|
||||||
|
```bash
|
||||||
|
ssh -Y torsten@greifserv
|
||||||
|
```
|
||||||
|
3. **In Screen:** Stelle vor dem Start sicher, dass `$DISPLAY` in deiner Shell gesetzt ist (z. B. `export DISPLAY=localhost:10.0`).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🛠️ Verwendung der Skripte
|
||||||
|
|
||||||
|
Beide Skripte müssen vor der ersten Nutzung ausführbar gemacht werden:
|
||||||
|
```bash
|
||||||
|
chmod +x run_gui_docker.sh exec_gui_docker.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### 1. Container neu starten (`run_gui_docker.sh`)
|
||||||
|
Extrahiert das X11-Sicherheits-Cookie des Host-Users, bereinigt Hostnamen-Konflikte, startet den Container im Host-Netzwerk (`--net=host`) und konfiguriert die Rechte im Container vollautomatisch.
|
||||||
|
|
||||||
|
* **Ausführung:**
|
||||||
|
```bash
|
||||||
|
./run_gui_docker.sh
|
||||||
|
```
|
||||||
|
* **Test im Container:** `xclock &` eingeben. Die Uhr sollte auf deinem lokalen PC erscheinen.
|
||||||
|
|
||||||
|
### 2. In laufenden Container einklinken (`exec_gui_docker.sh`)
|
||||||
|
Öffnet eine weitere Shell (neues Screen-Fenster/Tab) in dem bereits laufenden GUI-Container. Es ermittelt automatisch die aktive Container-ID sowie das aktuelle Host-Display und vererbt die X11-Umgebungsvariablen.
|
||||||
|
|
||||||
|
* **Ausführung:**
|
||||||
|
```bash
|
||||||
|
./exec_gui_docker.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🛑 Fehlerbehebung
|
||||||
|
|
||||||
|
* **Fehler:** `❌ Fehler: Kein aktives DISPLAY auf dem Host gefunden!`
|
||||||
|
* **Lösung:** Außerhalb von Screen `echo $DISPLAY` prüfen (z. B. `localhost:10.0`). In Screen die Variable händisch angleichen: `export DISPLAY=localhost:10.0`, danach das Skript erneut starten.
|
||||||
|
* **Fehler:** `X11 connection rejected...` beim manuellen Testen
|
||||||
|
* **Ursache:** Das Cookie passt nicht zum Display. Nutze immer `run_gui_docker.sh`, da dieses das Cookie netzwerkneutral umschreibt.
|
||||||
Executable
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# 1. Laufenden Container automatisch finden
|
||||||
|
IMAGE_NAME="legatus-qt6-prebuilt"
|
||||||
|
CONTAINER_ID=$(docker ps --filter "ancestor=$IMAGE_NAME" --format "{{.ID}}" | head -n 1)
|
||||||
|
|
||||||
|
if [ -z "$CONTAINER_ID" ]; then
|
||||||
|
echo "❌ Fehler: Es läuft kein Container, der auf dem Image '$IMAGE_NAME' basiert."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 2. Aktuelle Display-Nummer vom Host auslesen
|
||||||
|
if [ -z "$DISPLAY" ]; then
|
||||||
|
echo "❌ Fehler: Kein aktives DISPLAY auf dem Host gefunden!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
DISPLAY_NUM=$(echo $DISPLAY | grep -oP '(?<=:)\d+' | head -n 1)
|
||||||
|
CONTAINER_DISPLAY=":${DISPLAY_NUM}.0"
|
||||||
|
|
||||||
|
echo "🔌 Klinke in laufenden Container ein ($CONTAINER_ID)..."
|
||||||
|
|
||||||
|
# 3. Docker exec mit den passenden X11-Variablen aufrufen
|
||||||
|
docker exec -it \
|
||||||
|
-e DISPLAY="$CONTAINER_DISPLAY" \
|
||||||
|
-e XAUTHORITY=/tmp/.Xauthority \
|
||||||
|
"$CONTAINER_ID" \
|
||||||
|
bash
|
||||||
Executable
+54
@@ -0,0 +1,54 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# 1. Aktuelle Display-Nummer vom Host ermitteln (z.B. 10)
|
||||||
|
if [ -z "$DISPLAY" ] || [ "$DISPLAY" = "localhost" ]; then
|
||||||
|
echo "❌ Fehler: Kein aktives DISPLAY auf dem Host gefunden!"
|
||||||
|
echo "Stelle sicher, dass du dich per 'ssh -Y' verbunden hast."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Extrahiere die reine Nummer (z.B. aus 'localhost:10.0' wird '10')
|
||||||
|
DISPLAY_NUM=$(echo $DISPLAY | grep -oP '(?<=:)\d+' | head -n 1)
|
||||||
|
CONTAINER_DISPLAY=":${DISPLAY_NUM}.0"
|
||||||
|
|
||||||
|
echo "🔄 Erstelle X11-Cookie für Display :${DISPLAY_NUM}..."
|
||||||
|
|
||||||
|
# 2. Cookie temporär extrahieren
|
||||||
|
COOKIE_FILE="/tmp/docker_x11_cookie_tmp"
|
||||||
|
rm -f "$COOKIE_FILE"
|
||||||
|
xauth extract "$COOKIE_FILE" "$DISPLAY"
|
||||||
|
|
||||||
|
# Sicherheitsprüfung
|
||||||
|
if [ ! -f "$COOKIE_FILE" ] || [ ! -s "$COOKIE_FILE" ]; then
|
||||||
|
echo "❌ Fehler: X11-Cookie konnte nicht extrahiert werden (ist xauth installiert?)."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "🚀 Starte Docker-Container mit GUI-Forwarding..."
|
||||||
|
|
||||||
|
# 3. Docker starten und Inline-Befehl zur Rechtevergabe im Container ausführen
|
||||||
|
docker run --rm -it \
|
||||||
|
--net=host \
|
||||||
|
-e RTI_LICENSE_FILE=/workspace/rti_license.dat \
|
||||||
|
-v /tmp/.X11-unix:/tmp/.X11-unix:ro \
|
||||||
|
-v "$COOKIE_FILE":"$COOKIE_FILE":ro \
|
||||||
|
-v "$MIGRATE_PIPELINE_ROOT":/workspace \
|
||||||
|
-v "$MIGRATE_PIPELINE_ROOT/external":/workspace/external:ro \
|
||||||
|
-w /workspace/qt-migration-legatus/qt6-after/qt6-migrated-legatus \
|
||||||
|
--entrypoint /bin/bash \
|
||||||
|
legatus-qt6-prebuilt:latest \
|
||||||
|
-c "
|
||||||
|
export XAUTHORITY=/tmp/.Xauthority
|
||||||
|
rm -f /tmp/.Xauthority
|
||||||
|
xauth add :${DISPLAY_NUM} . \$(xauth -f $COOKIE_FILE list | awk '{print \$3}') 2>/dev/null
|
||||||
|
export DISPLAY=${CONTAINER_DISPLAY}
|
||||||
|
echo -e '\n=================================================='
|
||||||
|
echo -e '✅ GUI-Docker-Umgebung erfolgreich konfiguriert!'
|
||||||
|
echo -e 'DISPLAY ist gesetzt auf: ' \$DISPLAY
|
||||||
|
echo -e 'Teste es jetzt mit: xclock &'
|
||||||
|
echo -e '==================================================\n'
|
||||||
|
bash
|
||||||
|
"
|
||||||
|
|
||||||
|
# 4. Aufräumen nach dem Beenden des Containers
|
||||||
|
rm -f "$COOKIE_FILE"
|
||||||
Reference in new issue
Block a user