Thursday, November 12, 2026

Automating openSUSE Tumbleweed Bare-Metal Installs with Agama and Wayland TTY1 Auto-Login

 
When deploying openSUSE Tumbleweed on bare-metal hardware using the Agama installer, certain GPU and HDMI monitor combinations can stall at the SDDM login screen after the first reboot. Below are two practical, repeatable ways to bypass SDDM and launch KDE Plasma Wayland directly via TTY1: first by embedding a `chroot` post-install hook directly inside Agama's `profile.json` , and second via a standalone, idempotent post-reboot bash script executed over SSH .

This update of profile.json and script bypass-sddm-wayland.sh  are closely linked to the final part of the post  Agama Unattended installation openSUSE Tumbleweed via profile.json on remote host (bare metal ) at  Lxer.com

 ### Method 1: Embedding a Chroot Post-Install Hook in `profile.json` (*)
Add a `"scripts"` block to your exported `profile.json` (*):
* Disable `sddm.service` and set the default target to `multi-user.target`.
* Configure a systemd service override for `getty@tty1` to auto-login your target user (`id -nu 1000`).
* Update `~/.bash_profile` to automatically execute `/usr/bin/startplasma-wayland` when logging in on TTY1 (`XDG_VTNR` equals 1).

"scripts": {
    "post": [
      {
        "name": "bypass-sddm-tty1-wayland",
        "chroot": true,
        "body": "#!/bin/bash\nset -e\n\nTARGET_USER=$(id -nu 1000)\n\nsystemctl disable sddm.service --force\nsystemctl set-default multi-user.target\n\nmkdir -p /etc/systemd/system/getty@tty1.service.d\ncat << EOF > /etc/systemd/system/getty@tty1.service.d/override.conf\n[Service]\nExecStart=\nExecStart=-/sbin/agetty --autologin ${TARGET_USER} --noclear %I \$TERM\nEOF\n\ncat << 'EOF' >> /home/${TARGET_USER}/.bash_profile\n# Automatically launch KDE Plasma Wayland if logging in on TTY1\nif [ -z \"${DISPLAY}\" ] && [ \"${XDG_VTNR}\" -eq 1 ]; then\n    exec /usr/bin/startplasma-wayland\nfi\nEOF\n\nchown ${TARGET_USER}:users /home/${TARGET_USER}/.bash_profile\n"
      }
    ]
  }
}
python3 -m json.tool ~/Downloads/profile.json > /dev/null && echo "JSON OK"

 
### Method 2: Standalone Post-Reboot Bash Script (`bypass-sddm-wayland.sh`) 

If using a standard `profile.json` without embedded hooks, execute the standalone script over SSH as `root` after rebooting (*) to apply the same `sddm` disablement, `getty@tty1` auto-login override, and `.bash_profile` Plasma Wayland startup sequence for the target user. 

#!/bin/bash
# 

#==========================================================
# openSUSE Tumbleweed Post-Install SDDM Bypass & Auto-Login to Plasma Wayland
# Purpose: Bypasses broken SDDM HDMI login prompts by enabling automatic TTY1
#          console login and launching KDE Plasma Wayland directly.
# Usage:   Run as root via SSH after first reboot:
#          sudo ./bypass-sddm-wayland.sh [username]
#=========================================================

set -euo pipefail

# 1. Verify root privileges
if [[ "${EUID}" -ne 0 ]]; then
    echo "ERROR: This script must be run as root." >&2
    exit 1
fi

# 2. Resolve target desktop user (defaults to passed argument or UID 1000)
TARGET_USER="${1:-$(id -nu 1000 2>/dev/null || true)}"

if [[ -z "${TARGET_USER}" ]] || ! id "${TARGET_USER}" &>/dev/null; then
    echo "ERROR: Valid non-root user not found. Pass username explicitly: $0 <username>" >&2
    exit 1
fi

USER_HOME=$(getent passwd "${TARGET_USER}" | cut -d: -f6)
USER_GROUP=$(id -gn "${TARGET_USER}")

echo "Configuring TTY1 autologin and Plasma Wayland startup for user: ${TARGET_USER}"

# 3. Disable SDDM display manager and switch default boot target to multi-user CLI
echo "Disabling SDDM and setting default target to multi-user.target..."
systemctl disable sddm.service --force
systemctl set-default multi-user.target

# 4. Configure systemd getty@tty1 drop-in override for automatic console login
echo "Creating systemd override for getty@tty1.service..."
OVERRIDE_DIR="/etc/systemd/system/getty@tty1.service.d"
mkdir -p "${OVERRIDE_DIR}"

cat << EOF > "${OVERRIDE_DIR}/override.conf"
[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin ${TARGET_USER} --noclear %I \$TERM
EOF

# 5. Configure user's ~/.bash_profile to source ~/.bashrc and start Plasma Wayland on TTY1
echo " Updating ${USER_HOME}/.bash_profile..."
BASH_PROFILE="${USER_HOME}/.bash_profile"

# Create .bash_profile with standard .bashrc sourcing if it does not exist yet
if [[ ! -f "${BASH_PROFILE}" ]]; then
    cat << 'EOF' > "${BASH_PROFILE}"
# Source the user's primary bash configuration if it exists
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
EOF
fi

# Append startplasma-wayland block only if not already present (idempotent)
if ! grep -q "startplasma-wayland" "${BASH_PROFILE}"; then
    cat << 'EOF' >> "${BASH_PROFILE}"

# Automatically launch KDE Plasma Wayland if logging in on TTY1
if [ -z "${DISPLAY}" ] && [ "${XDG_VTNR:-0}" -eq 1 ]; then
    exec /usr/bin/startplasma-wayland
fi
EOF
fi

# 6. Restore proper file ownership and reload systemd daemon
echo "Setting permissions and reloading systemd..."
chown "${TARGET_USER}:${USER_GROUP}" "${BASH_PROFILE}"
systemctl daemon-reload

echo "========================================================="
echo "Done! Reboot the system ('systemctl reboot') to boot straight into Plasma."
echo "========================================================="











REFERENCES
(*) Proposed by Google AI

Tuesday, November 10, 2026

Agama Unattended installation openSUSE Tumbleweed via profile.json on remote host (bare metal )

UPDATE as of 11/11/26   

Official AI feed-backs recommends injecting profile.json into Agama Live Instance only via access to remote Web Site ( running as python3 -m http.server 8080 --bind IP-Web ) . However, if you are experiencing problems to obtain your own profile.json via Web that is not a problem to "scp" this file to remote Agama Live instance either just get inside Live instance using established root's ssh connection to Agama Live Instance on target box and copy and paste original profile.json into /tmp/profile.json in Live environment to issue "agama config load /tmp/profile.json" as command of bash script followed by "scp" either just manually . That is what this post is about.

END UPDATE 

Unattended openSUSE Tumbleweed deployments on bare metal are critical because they eliminate manual intervention, ensure configuration consistency, and drastically reduce provisioning time across physical infrastructure. While Tumbleweed is a rolling-release distribution - traditionally favored by developers and power users on personal machines - deploying it at scale on bare metal using unattended methods providing by Agama Installer serves several vital engineering and operational purposes:

• Elimination of Human Error: Manual OS installations introduce variances in disk partitioning, package selection, and initial network setups. Unattended installations use a version-controlled configuration file (like profile.json) to guarantee
that server is an exact clone of the intended specification.
• Declarative Infrastructure: Treating your bare-metal OS installation as code aligns your physical infrastructure with modern DevOps practices, making state drift easier to prevent and audit. 

 After booting via USB pen on target box,right after you see the first screen  for selection of desired OS . You are supposed to press CTRL+ALT+F3 without any other input into the first page of Agama Web UI. You would see in terminal  IP-TARGET of target host and root password. From another box launch your browser to https://IP-TARGET. This step will bring you to Agama WEB UI and prompt for root "password".

After entering WEB UI environment select OS (Tumbleweed for instance) manage  as usual until creating root account. You should have SSH trusted pair already generated prior to configuring
root's credentials on target box. I've selected password and SSH public key.
Cut and paste SSH Public key into corresponding field on Agama
Configuration been created via Anaconda Web UI will be available via clicking small circle in right upper corner of the page. When you finished disk layout config, DE selection, packages selection, user's and root credentials along with ssh public key for root you may copy and paste your configuration into ~/Downloads/profile.json. 

You may also download file system_name.json and copy to profile.json. Next step is just cut and paste ~/Downloads/profile.json into /tmp/profile.json inside Agama Live Instance via open by root ssh session with Live Instance on target box

CTRL+ALT+F3 has already created Live Agama instance on target host . Live Agama instance was created with sshd service already up and running. SSH to target host via known temp-password for root. After logging into Agama Live instance on target host you will appear on prompt agama~#

You are supposed to issue from agama:~# prompt following commands :

agama:~ # agama config load /tmp/profile.json
Ready to start the installation.
agama:~ # agama install 

The expected result is running Tumbleweed deployment on target box, actually, in Agama Live instance environment. (*)


Speed of downloading 4894 packages would be pretty high except  several packages like kernel-default and final one related to plasma setup on tumbleweed.

When done you should see a message in terminal 

agama:~ # agama install
The installation finished successfully.

Next go ahead and reboot target box 

agama:~ # systemctl reboot.

Broken SDDM login prompt may be fixed remotely via root login using injected ssh-public-key been written into profile.json   

# systemctl disable sddm.service --force
# systemctl set-default multi-user.target
# mkdir -p /etc/systemd/system/getty@tty1.service.d
# nano /etc/systemd/system/getty@tty1.service.d/override.conf
[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin user1 --noclear %I $TERM

CTRL+O; CTRL+X

# su - user1
======================
$ nano ~/.bash_profile
======================
# Source the user1's primary bash configuration if it exists
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
# Automatically launch KDE Plasma Wayland if logging in on TTY1
if [ -z "${DISPLAY}" ] && [ "${XDG_VTNR}" -eq 1 ]; then
    exec /usr/bin/startplasma-wayland
fi

Final configuration on openSUSE Tumbleweed instance been installed on target box in unattended mode using profile.json been generated in Agama Web UI environment on remote workstation and injecting profile.json into Agama Live Instance created by pressing CTRL+ALT+F3 on target host almost silently with no additional information provided to you 

boris@localhost:~> fastfetch
         ,...,                                 boris@localhost
    .,:lloooooc;.                              ---------------
  ,ool'     oo,;oo:                            OS: openSUSE Tumbleweed x86_64
.lo'        oo.   oo:                          Kernel: Linux 7.3.1-1-default
.oo.         oo.    oo:                         Uptime: 1 hour, 50 mins
:ol          oo.    'oo                         Packages: 2464 (rpm)
:oo         .oo.    .oo.                        Shell: bash 5.3.20
.oooooooooooooo.    .oo.                        Display (E215A): 1920x1080 in 21", 60 Hz [External]
;oo.               .oo.                        Desktop Environment: KDE Plasma 6.8.2
 'oo,              .oo.                        Window Manager: KWin (Wayland)
   "ooc,',,,,,,,,,,:ooc,,,,,,,,,,,             WM Theme: Breeze
      ':cooooooooooooooooooooooooool;.         Theme: Breeze (Classic) [Qt], Breeze [GTK2/3]
                   .oo.             .oo;       Icons: breeze [Qt], breeze [GTK2/3/4]
                   .oo.               .oo.     Font: Noto Sans (12pt) [Qt], Noto Sans (12pt) [GTK2/3/4]
                   .oo.    'oooooooooo:ooo.    Cursor: breeze (24px)
                   .oo.    'oo.         col    Terminal: konsole 26.8.3
                   .oo'    'oo          col    Terminal Font: Hack (17pt)
                    coo    'oo          oo'    CPU: Intel(R) Xeon(R) E5-2690 v3 (24) @ 3.50 GHz
                     coc   'oo        .lo,     GPU: AMD Radeon HD 6450/7450/8450 / R5 230 OEM
                      `oo, 'oo      .:oo       Memory: 2.71 GiB / 31.24 GiB (9%)
                        'ooooc,, ,:lol         Swap: Disabled
                           `''"clc"'           Disk (/): 7.01 GiB / 128.00 GiB (5%) - btrfs
                                               Disk (/opt): 4.93 GiB / 255.88 GiB (2%) - xfs
                                               Local IP (bridge0): 192.168.0.57/24
                                               Locale: en_US.UTF-8
                                                
                                                                        
                                                                        
boris@localhost:~> df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/sda3      btrfs     128G  7.1G  120G   6% /
devtmpfs       devtmpfs   16G     0   16G   0% /dev
tmpfs          tmpfs      16G     0   16G   0% /dev/shm
efivarfs       efivarfs  256K  111K  141K  44% /sys/firmware/efi/efivars
tmpfs          tmpfs     6.3G  2.0M  6.3G   1% /run
none           tmpfs     1.0M     0  1.0M   0% /run/credentials/systemd-journald.service
tmpfs          tmpfs      16G  8.0K   16G   1% /tmp
/dev/sda3      btrfs     128G  7.1G  120G   6% /.snapshots
/dev/sda3      btrfs     128G  7.1G  120G   6% /usr/local
/dev/sda3      btrfs     128G  7.1G  120G   6% /srv
/dev/sda3      btrfs     128G  7.1G  120G   6% /var
/dev/sda3      btrfs     128G  7.1G  120G   6% /home
/dev/sda3      btrfs     128G  7.1G  120G   6% /root
/dev/sda4      xfs       256G  5.0G  251G   2% /opt
/dev/sda2      ext4      2.3G  107M  2.0G   5% /boot
/dev/sda1      vfat      953M  101M  852M  11% /boot/efi
none           tmpfs     1.0M     0  1.0M   0% /run/credentials/getty@tty1.service
tmpfs          tmpfs     3.2G   76K  3.2G   1% /run/user/1000
boris@localhost:~> lsblk -f
NAME        FSTYPE  FSVER            LABEL                   UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
sda                                                                                                               
├─sda1      vfat    FAT32                                    B4E0-5428                             851.4M    11% /boot/efi
├─sda2      ext4    1.0                                      f2aa55cd-cdcd-4dbc-a5bb-a5d30380c474      2G     5% /boot
├─sda3      btrfs                                            1c6c08f5-3d5c-4d00-b5d0-15779f5a5ea8                /etc/libvirt/qemu
│                                                                                                                /root
│                                                                                                                /home
│                                                                                                                /var
│                                                                                                                /srv
│                                                                                                                /usr/local
│                                                                                                                /.snapshots
│                                                                                                                /
└─sda4      xfs                                              d81d8fb0-1d1e-429f-bdea-d5c72ebd3606  250.9G     2% /opt

boris@localhost:~> findmnt -t btrfs
TARGET              SOURCE                              FSTYPE OPTIONS
/                   /dev/sda3[/@/.snapshots/1/snapshot] btrfs  rw,relatime,seclabel,space_cache=v2,subvolid=263,subvol=/@/.snapshots/1/
├─/home             /dev/sda3[/@/home]                  btrfs  rw,relatime,seclabel,space_cache=v2,subvolid=261,subvol=/@/home
├─/root             /dev/sda3[/@/root]                  btrfs  rw,relatime,seclabel,space_cache=v2,subvolid=260,subvol=/@/root
├─/.snapshots       /dev/sda3[/@/.snapshots]            btrfs  rw,relatime,seclabel,space_cache=v2,subvolid=262,subvol=/@/.snapshots
├─/srv              /dev/sda3[/@/srv]                   btrfs  rw,relatime,seclabel,space_cache=v2,subvolid=259,subvol=/@/srv
├─/usr/local        /dev/sda3[/@/usr/local]             btrfs  rw,relatime,seclabel,space_cache=v2,subvolid=258,subvol=/@/usr/local
├─/var              /dev/sda3[/@/var]                   btrfs  rw,relatime,seclabel,space_cache=v2,subvolid=257,subvol=/@/var
└─/etc/libvirt/qemu /dev/sda3[/@qemu]                   btrfs  rw,relatime,seclabel,space_cache=v2,subvolid=270,subvol=/@qemu


   boris@localhost:~> lsblk -d -o NAME,VENDOR,MODEL,SIZE,SERIAL|grep 596
sda     ATA      WDC WD6401AALS-00E3A0           596.2G WD-WCATR4549247

====================== 

Batch mode version (*)

====================== 

Notice that sshpass is supposed to installed via particular package manager ( in my case dnf5 ) 

#!/bin/bash
# # openSUSE Tumbleweed Minimal Remote Provisioner
# Run from Workstation (192.168.0.17) targeting Host (192.168.0.10)
# 

set -e

TARGET_IP="192.168.0.10"
TEMP_PASSWORD="D69ZkDe2"
LOCAL_PROFILE="/home/boris/Downloads/profile.json"

# Export password for sshpass to run hands-off
export SSHPASS=$TEMP_PASSWORD

echo "1. Flushing target host key signature..."
ssh-keygen -f "$HOME/.ssh/known_hosts" -R "$TARGET_IP" 2>/dev/null || true

echo "2. Copying profile.json to target RAM filesystem..."
sshpass -e scp -o StrictHostKeyChecking=no "$LOCAL_PROFILE" 
\ root@$TARGET_IP:/tmp/profile.json

echo "3. Ingesting profile and executing installation on target..."
sshpass -e ssh -o StrictHostKeyChecking=no root@$TARGET_IP bash << 'EOF'
  set -e
  agama config load /tmp/profile.json
  agama install
  systemctl reboot
EOF

echo "Deployment triggered successfully. Target box is rebooting."
 

 Batch mode intentionally interrupted before reboot 



Would I allow automated reboot of target host. Target host would skip broken SDDM login and bring you to black screen without any signs of life . However, remote login via SSH would demonstrate you healthy Tumbleweed environment. Thus you appear to be forced to run standard fix remotely

# systemctl disable sddm.service --force
# systemctl set-default multi-user.target
# mkdir -p /etc/systemd/system/getty@tty1.service.d
# nano /etc/systemd/system/getty@tty1.service.d/override.conf
[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin boris --noclear %I $TERM

CTRL+O; CTRL+X

# su - user1
======================
$ nano ~/.bash_profile
======================
# Source the user1's primary bash configuration if it exists
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
# Automatically launch KDE Plasma Wayland if logging in on TTY1
if [ -z "${DISPLAY}" ] && [ "${XDG_VTNR}" -eq 1 ]; then
    exec /usr/bin/startplasma-wayland
fi

REFERENCES

(*) Assisted by Google AI 

Monday, November 9, 2026

Agama Unattended installation via profile.json of Tumbleweed's KVM Guests

 Tumbleweed updates continuously, manual interactive installations frequently break due to rapid package, installer (Agama), or kernel shifts. Unattended automation ensures predictable, reproducible, and verifiable states for disaster recovery and testing.

• Mitigating Rolling-Release Fluctuation: Tumbleweed moves extremely fast. An unattended deployment via structured templates (profile.json) ensures that the initial bootstrap bypasses manual package selection errors and unpredictable installer UI changes.
• Disaster Recovery Validation Loop: For continuous integration or automated DR testing, environments must be torn down and rebuilt from scratch. Unattended installation scripts (using virt-install) allow you to programmatically verify that guest configurations, volume management definitions, and baseline application profiles work under the latest upstream packages without human intervention. (*)

=================================================================

The sample of profile.json file ( generated via Agama Web UI )

=================================================================

boris@localhost:~/Downloads> cat profile.json
{
 "product": {
   "id": "Tumbleweed"
 },
 "software": {
   "patterns": {
     "add": [
       "kvm_tools",
       "kde",
       "cockpit",
       "selinux"
     ],
     "remove": [
       "office"
     ]
   }
 },
 "storage": {
   "boot": {
     "configure": true
   },
   "drives": [
     {
       "partitions": [
         {
           "filesystem": {
             "mountOptions": [],
             "path": "/boot/efi",
             "reuseIfPossible": false,
             "type": "vfat"
           },
           "id": "esp",
           "size": {
             "max": 1000000000,
             "min": 1000000000
           }
         },
         {
           "filesystem": {
             "mountOptions": [],
             "path": "/boot",
             "reuseIfPossible": false,
             "type": "ext4"
           },
           "size": {
             "max": 2500000000,
             "min": 2500000000
           }
         },
         {
           "filesystem": {
             "mountOptions": [],
             "path": "/",
             "reuseIfPossible": false,
             "type": {
               "btrfs": {
                 "snapshots": true
               }
             }
           },
           "size": {
             "max": 55000000000,
             "min": 55000000000
           }
         },
         {
           "filesystem": {
             "mountOptions": [],
             "path": "/opt",
             "reuseIfPossible": false,
             "type": "xfs"
           },
           "size": {
             "max": 67000000000,
             "min": 67000000000
           }
         },
         {
           "delete": true,
           "search": {
             "ifNotFound": "skip"
           }
         }
       ],
       "search": {
         "condition": {
           "name": "/dev/vda"
         },
         "ifNotFound": "error"
       }
     }
   ],
   "mdRaids": [],
   "volumeGroups": []
 },
 "user": {
   "fullName": "boris",
   "password": "***********",
   "hashedPassword": false,
   "userName": "boris",
   "sshPublicKeys": []
 },
 "root": {
   "password": "************",
   "hashedPassword": false,
   "sshPublicKeys": [
     "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK+XwCy1t95wJD0eErIpkeeXc9qGN/rwX1hAkEKJoOGQ name@example.com"
   ]
 }

Python3 -m http.server 8080 --bind 192.168.0.23 starts a basic local web server that shares the files in your current working directory over the network. Port 8080 been opened requires some additional tuning (*)

$ sudo firewall-cmd --zone=trusted --remove-interface=bridge0 --permanent
OR if you added the port explicitly to a public/home zone:
$ sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
$ sudo firewall-cmd --reload

boris@localhost:~/Downloads> python3 -m http.server 8080 --bind 192.168.0.23  Serving HTTP on 192.168.0.23 port 8080 (http://192.168.0.23:8080/) ...
192.168.0.51 - - [09/Nov/2026 08:25:19] "GET /profile.json HTTP/1.1" 200 -

Virt-install command line for unattended deploying Tumbleweed KVM Guest (*)
 #!/bin/bash
virt-install \
  --name tw-unattended-Guest03 \
  --memory 10000 \
  --vcpus 4 \
  --osinfo opensusetumbleweed \
  --disk pool=default,size=125,bus=virtio,format=qcow2 \
  --network bridge=bridge0,model=virtio \
  --graphics vnc,listen=127.0.0.1 \

  --location /home/boris/Downloads/agama-installer.x86_64-25.0.0-openSUSE-Build8.23.iso,kernel=boot/x86_64/loader/linux,initrd=boot/x86_64/loader/initrd \
  --extra-args "inst.auto=http://192.168.0.23:8080/profile.json"

Virt-install Guest startup and Guest's Console

localhost:~ # ./virtInst03.sh
WARNING  No display detected. Not running virt-viewer.
WARNING  No console to launch for the guest, defaulting to --wait -1

Starting install...
Retrieving 'linux'                        |  17 MB  00:00:00
Retrieving 'initrd'                       | 128 MB  00:00:00
Allocating 'tw-unattended-Guest03.qcow2'   |         00:00:00
Creating domain...                                                                                             
Domain is still running. Installation may be in progress.
Waiting for the installation to complete.
Domain has shutdown. Continuing.
Domain creation completed.
Restarting guest. 


 










(*) Enabling audio via switching to Spice Console

Inside VM issue

#1. Access the guest OS command line to spin up the virtualization channels
$ sudo systemctl start qemu-guest-agent
$ sudo systemctl start spice-vdagentd
# 2. Verify the active background execution status of both services
$ sudo systemctl status qemu-guest-agent spice-vdagentd 

Shutdown VM and update XML-profile as follows 

$ sudo EDITOR=nano virsh edit tw-unattended-guest01 

 <sound model='ich9'>
  <audio id='1'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x1b' function='0x0'/>
</sound>
<audio id='1' type='spice'/>

Detached VNC Console created using Cockpit Web interface






REFERENCES

(*) Assisted by Google AI 

 

Friday, November 6, 2026

Online setup openSUSE Leap 16.1 on bare metal and tuning correct resolution for HDMI Monitor

What is Agama's SSH Injection Advantage: By injecting public key into Agama during the network deployment phase, the very first boot of the newly installed operating system will have the OpenSSH daemon (sshd) active and your authorized keys populated.This gives you a guaranteed SSH hook into the target host. You don't have to look at the unreadable HDMI screen to execute the configuration script below you can run it smoothly from a remote machine, cleanly stripping away the problematic
SDDM prompt and tailoring the Wayland desktop profile securely. 

Online setup openSUSE Leap 16.1 on bare metal may be performed via Leap-16.1-online-installer-x86_64.install.iso with same Web UI as Agama installer. Installation phase is almost the same as described in Install Tumbleweed via Agama Installer and automated detection of HDMI ports   However , on Leap 16.1 the block marked in blue is critical on Leap 16.1

"You should have SSH trusted pair already generated prior to configuring root's credentials on target box. I've selected password and SSH public key. Cut and paste SSH Public key into corresponding field on Agama Web UI. Save and start installation" which would be initiated remotely from your workstation.
Agama follows standard transactional schema when preparing desired disk layout, selection of DE, user's and root's credentials until you press "Install".  In particular user1 credentials were also injected into Agama Web UI before installation started.

Upon system reboot instead of struggling with poor quality SDDM login you better issue from host initiated Agama Web UI and having ssh trusted connection to target box (*) :

# systemctl disable sddm.service --force
# systemctl set-default multi-user.target
# mkdir -p /etc/systemd/system/getty@tty1.service.d
# nano /etc/systemd/system/getty@tty1.service.d/override.conf
[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin user1 --noclear %I $TERM

CTRL+O; CTRL+X

# su - user1 

======================
$ nano ~/.bash_profile
====================== 

# Source the user1's primary bash configuration if it exists
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
# Automatically launch KDE Plasma Wayland if logging in on TTY1
if [ -z "${DISPLAY}" ] && [ "${XDG_VTNR}" -eq 1 ]; then
    exec /usr/bin/startplasma-wayland
fi

Verification step

user1@localhost:~> systemctl cat getty@tty1.service | grep "autologin"
ExecStart=-/sbin/agetty --autologin user1 --noclear %I $TERM

Upon next reboot of target box you would avoid SDDM login prompt and automatically start KDE Plasma 6.6.4 session.

I also have to notice that dracut hook like this 

$ echo 'hostonly="no"' | sudo tee /etc/dracut.conf.d/00-generic.conf
$ sudo dracut -f --regenerate-all 
won't help you under kernel 6.12 ( vs 7.2-7.3 kernels on Tumbleweed) 

  

 References

(*) Assisted by Google AI