Ist meine erste Frage hier in diesem Forum. Ich hoffe ich mache alles richtig.
Leider denke ich, dass ich ein bisschen weiter ausholen muss, um mein(e) Problem(e) zu beschreiben.
Ich weiss jetzt nicht wie viel Text ich schreiben darf und ob es nicht schläuer wäre von null anzufangen und jedes Problem einzeln anzugehen, weil es Euch sonst zu blöd wird.
Aber ich denke einen Versuch ist es wert.
Mein System:
Microsoft Windows 10 Pro / immer up-to-date
Intel(R) Core(TM) i7-7800X CPU @ 3.50GHz, 3501 MHz, 6 Cores, 12 Logical Processors
32 GB RAM
American Megatrends Inc. 3006, 07.02.2020 (DD.MM.YYYY)
SMBIOS-Version 3.2
ASUSTeK COMPUTER INC.
PRIME X299-A
Rev 1.xx
NVIDIA GeForce RTX 2070
Leap-15.2 per Store installiert
Warum WSL - warum nicht VM?
- Es ist (wäre) einfach bequemer.
- Was ich z.B. toll finde ist die export / import Funktion von WSL.
- Über das Netzlaufwerk auf die Dateien zugreifen
- Ich möchte über VS c# etwas entwickeln, wo ich eine openSUSE Distro brauche. Mit dem Konsolen-Switch wäre das echt eine praktische Sache.
- Es ist eigentlich auch nicht schlecht um mehr über Linux zu lernen.
Goal 🏆
- xrdp mit KDE in einer mehr oder weniger "sauberen" Umgebung (sudoers / session und mit systemd)
Es müsste ja eigentlich nicht unbedingt KDE sein, z.B. LXDE wäre auch ok. Aber ich habe mich irgendwie auf KDE verbissen und entsprechende Pakete installiert.
Ausserdem scheint "startplasma-x11" einigermassen mit xrdp zu harmonieren. Leider fehlt mir da einiges an Wissen.
Bei meinem ersten Testlauf habe ich es bis zum KDE Desktop geschafft und dann realisiert, dass ohne systemd mal gar nix geht. Z.B. yast2.
Aktueller status ⛏
Zuerst einmal habe ich alles weggekickt und bei null angefangen. Dann war mein erstes Ziel systemd zum laufen zu bringen.
Dabei habe ich mich an diesen guide gehalten wsl2-hacks:
- dbus-1 per rpm neu installiert
- policykit-1 per yast installiert
- daemonize-1.7.8-1-omv4000.x86_64.rpm irgendwo "geklaut" und die bin nach "/usr/sbin/" mit chown root und chmod 700 kopiert
Dann habe ich mit meinem beschränkten Wissen die "/usr/bin/bash" erstellt und entsprechend versucht diese suse-konform zu machen. Ausserdem habe ich gleichzeitig eine Routine eingefügt für xrdp als fork. Irgendwie wollte xrdp nichts von systemd wissen. Oder ich nicht, wie auch immer.
/usr/bin/bash:
#!/bin/bash
printf "\n"
echo "Starting init bash..."
# your WSL2 username
UNAME="marvin"
# fake run for dbus, just in case
if ! [ -d "/run/dbus" ]
then
mkdir /run/dbus
chmod 777 /run/dbus
fi
UUID=$(id -u "${UNAME}")
UGID=$(id -g "${UNAME}")
UHOME=$(getent passwd "${UNAME}" | cut -d: -f6)
USHELL=$(getent passwd "${UNAME}" | cut -d: -f7)
if [[ -p /dev/stdin || "${BASH_ARGC}" > 0 && "${BASH_ARGV[1]}" != "-c" ]]; then
USHELL=/bin/bash
fi
if [[ "${PWD}" = "/root" ]]; then
cd "${UHOME}"
fi
# get pid of systemd
SYSTEMD_PID=$(pgrep -xo systemd)
# if we're already in the systemd environment
if [[ "${SYSTEMD_PID}" -eq "1" ]]; then
exec "${USHELL}" "$@"
fi
# start systemd if not started
# wait for systemd to start
# add echo feedback and timeout to avoid infinite loop
sto=50 # 5 secs
if [[ "${SYSTEMD_PID}" = "" ]]; then
echo -e "Starting systemd PID ${SYSTEMD_PID} max timeout: $((sto/10))s"
/usr/sbin/daemonize -l "${HOME}/.systemd.lock" /usr/bin/unshare -fp --mount-proc /usr/lib/systemd/systemd --system-unit=basic.target
fi
while [[ "${SYSTEMD_PID}" = "" && $sto -gt 0 ]]; do
sleep 0.1
((sto--))
SYSTEMD_PID=$(pgrep -xo systemd)
done
if [ "$sto" -eq "0" ]; then
echo "Timeout while waiting for systemd PID. Exiting bash now...";
exit 1;
fi
printf "\n"
echo -e "Checking xrdp status..."
printf "\n"
if ! ps -C xrdp-sesman
then
sto=20
echo -e "Starting xrdp session manager... max timeout: $((sto/10))s"
[ -f /var/run/xrdp-sesman.pid ] && rm /var/run/xrdp-sesman.pid
xrdp-sesman
while ! ps -C xrdp-sesman > /dev/null && [ $sto -gt 0 ]; do
sleep 0.1
((sto--))
done
if [ "$sto" -eq "0" ]; then
echo "Timeout while waiting for xrdp-sesman PID.";
fi
fi
printf "\n"
if ! ps -C xrdp
then
sto=20
echo -e "Starting xrdp... max timeout: $((sto/10))s"
[ -f /var/run/xrdp.pid ] && rm /var/run/xrdp.pid
yes "" | openssl req -x509 -newkey rsa:2048 -nodes -keyout /etc/xrdp/key.pem -out /etc/xrdp/cert.pem -days 365 > /dev/null 2>&1
xrdp -f
while ! ps -C xrdp > /dev/null && [ $sto -gt 0 ]; do
sleep 0.1
((sto--))
done
if [ "$sto" -eq "0" ]; then
echo "Timeout while waiting for xrdp PID.";
fi
fi
printf "\n"
echo "Init bash done."
printf "\n"
# enter systemd namespace
exec /usr/bin/nsenter -t "${SYSTEMD_PID}" -m -p --wd="${PWD}" /usr/sbin/runuser -s "${USHELL}" "${UNAME}" -- "${@}"
Alles anzeigen
Habe noch ein paar Kommentare auf Englisch reingeschrieben. Weiss auch nicht wie Sinnvoll meine Umsetzung eines Timeout ist. Wie auch immer mein "gebastel" scheint soweit zu funktionieren.
Als xrdp user verwende ich den user "marvin", den ich beim firstboot in yast erstellt habe.
- Anschliessend xorg-x11, KDE patterns, yast2 patterns via yast installiert (und noch ein paar andere Sachen, macht süchtig )
- Bei xrdp habe ich mich grundsätzlich an diesen guide gehalten und ihn mit ein paar anderen Seiten kombiniert:
/home/marvin/.xsession
/home/marvin/.xclients
startplasma-x11
/etc/xrdp/startwm.sh
Hier fangen schon mal meine Probleme an, da ich irgendwie einfach nicht verstehe, wie eine ordentliche Session aufgebaut werden sollte. Das mit .xsession und .xclients scheint irgendwie total witzlos zu sein. Ich habe das einfach irgendwo aufgeschnappt.
- Dann habe ich mich via rdp localhost:3390 mit marvin auf der Xorg Session angemeldet.
Tja und da stecke ich im Moment fest:
- Wenn ich z.B. yast2 starten will kommt KDE mit kdesu, was ja auch gut so ist, nur leider geht das PW nicht. Also kein typo.
Also habe ich mal eine wheel gruppe erstellt und marvin hinzugefügt:
/etc/sudoers
/etc/sudoers.d/wheel-users
- Hat nicht funktioniert und scheint von mir aus ein Leerlauf zu sein, da ich ohne systemd auch keinen wheel hatte soweit ich weiss. Ausserdem hat es schon einen ausgeklammerten wheel im template. Scheint wo anders zu liegen?
Die services haben status failed bei auditd.service und systemd-modules-load.service.
- Noch ein paar relevante Konsolen-Befehle:
auditctl -e1
Error - audit support not in kernel
Cannot open netlink audit socket
hostnamectl | grep Kernel
Kernel: Linux 4.19.128-microsoft-standard
systemctl -l status systemd-modules-load.service
● systemd-modules-load.service - Load Kernel Modules
Loaded: loaded (/usr/lib/systemd/system/systemd-modules-load.service; static; vendor preset: disabled)
Active: failed (Result: exit-code) since Thu 2020-11-26 13:57:11 CET; 12min ago
Docs: man:systemd-modules-load.service(8)
man:modules-load.d(5)
Process: 25 ExecStart=/usr/lib/systemd/systemd-modules-load (code=exited, status=1/FAILURE)
Main PID: 25 (code=exited, status=1/FAILURE)
Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
Alles anzeigen
- Und schlussendlich noch ein riesen Massaker bei den Logs:
/var/log/warn
/home/marvin/.xorgxrdp.202.log - sieht alles in allem gar nicht so übel aus
Z:\home\marvin>dir /O > dir.txt
Ich habe keinen Plan wo ich ansetzen soll, oder ob es besser ist, das ganze auf den Müll zu kippen, da es sowieso zum scheitern verurteilt ist oder ob noch Hoffnung besteht.
Ich bin mir auch am überlegen, ob es eine Möglichkeit gibt, ein minimalist openSUSE auf WSL laufen zu lassen, wo ich alles Schritt für Schritt aufbauen könnte...
Auf jeden Fall bin ich für jeden Input dankbar.