{"id":169030,"date":"2026-06-18T04:15:48","date_gmt":"2026-06-18T01:15:48","guid":{"rendered":"https:\/\/computingforgeeks.com\/?p=169030"},"modified":"2026-06-18T04:15:48","modified_gmt":"2026-06-18T01:15:48","slug":"cockpit-web-console-opensuse-leap","status":"publish","type":"post","link":"https:\/\/computingforgeeks.com\/cockpit-web-console-opensuse-leap\/","title":{"rendered":"Manage openSUSE Leap with Cockpit: the YaST Replacement"},"content":{"rendered":"<p>YaST is gone in openSUSE Leap 16, and the replacement most administrators reach for day to day is <a href=\"https:\/\/cockpit-project.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Cockpit<\/a>, a web console that ships in the default install. The decision Cockpit makes for you is a sensible one. Instead of a heavy, always-running admin stack, you get a lightweight service that activates only when you open it in a browser, then drives the system through the same APIs you would script by hand.<\/p>\n\n<p>We ran every step below on an openSUSE Leap 16 server in June 2026, so the console layout, the package names, and the SELinux behavior match what you will see. This guide gets Cockpit running, then walks the parts you will actually use: the system overview, services, storage with Btrfs snapshots, software updates, SELinux troubleshooting, the built-in terminal, and finally how to expose the console safely for remote administration.<\/p>\n\n<h2>What Cockpit replaces, and what it does not<\/h2>\n\n<p>Leap 16 <a href=\"https:\/\/doc.opensuse.org\/release-notes\/x86_64\/openSUSE\/Leap\/16.0\/\" target=\"_blank\" rel=\"noreferrer noopener\">split the old YaST monolith<\/a> into focused tools. Agama is the new installer, Myrlyn is the graphical package manager, and Cockpit is the running-system administration console. That division matters when you plan your workflow, because Cockpit is deliberately not a one-to-one YaST clone. It covers the operational surface (services, storage, networking, accounts, logs, updates, SELinux, a terminal) and leaves installation to Agama and bulk package browsing to Myrlyn or zypper.<\/p>\n\n<p>The trade-off is worth stating plainly. Cockpit is excellent for the daily operational tasks and for giving a junior admin a safe, auditable view of a box. It is not where you do a complex storage migration or a fine-grained AutoYaST-style mass configuration. For that you still drop to the shell, which Cockpit conveniently gives you in the browser. The same console and the same modules run on SUSE Linux Enterprise Server 16, so what you learn here carries straight over to the paid platform. If you are still weighing the editions, our <a href=\"https:\/\/computingforgeeks.com\/opensuse-leap-vs-tumbleweed-vs-sles\/\">Leap, Tumbleweed, and SLES comparison<\/a> covers where each one fits.<\/p>\n\n<h2>Confirm Cockpit is installed and running<\/h2>\n\n<p>On a default Leap 16 install Cockpit is already present. Confirm the packages before you do anything else:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>rpm -qa 'cockpit*'<\/code><\/pre>\n\n\n<p>You should see the web service, the bridge, and the core modules already in place:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>cockpit-ws-354-160000.3.1.x86_64\ncockpit-bridge-354-160000.3.1.noarch\ncockpit-system-354-160000.3.1.noarch\ncockpit-storaged-354-160000.3.1.noarch\ncockpit-networkmanager-354-160000.3.1.noarch\ncockpit-packagekit-354-160000.3.1.noarch<\/code><\/pre>\n\n\n<p>If this is a minimal or server-role install and the packages are missing, pull in the console plus the storage, networking, and updates pages in one command. The base <code>cockpit<\/code> meta package only brings the bridge, system, and web service, so name the modules you want explicitly:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>sudo zypper install cockpit cockpit-storaged cockpit-networkmanager cockpit-packagekit<\/code><\/pre>\n\n\n<p>Cockpit is socket-activated, which is the resource win mentioned earlier: the web service does not sit idle consuming memory, it spins up when the first connection arrives. Enable the socket so it is ready on boot:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>sudo systemctl enable --now cockpit.socket<\/code><\/pre>\n\n\n<p>Confirm the socket is listening:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>systemctl is-active cockpit.socket<\/code><\/pre>\n\n\n<p>A healthy socket reports active and binds port 9090:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>active<\/code><\/pre>\n\n\n<p>Leap 16 runs firewalld by default, so open the dedicated Cockpit service before you try to connect from another machine:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>sudo firewall-cmd --permanent --add-service=cockpit\nsudo firewall-cmd --reload<\/code><\/pre>\n\n\n<p>The console is now reachable on port 9090 from any machine on the network. The remote-access section at the end of this guide narrows that exposure once you move past the local LAN.<\/p>\n\n<h2>Open the web console and sign in<\/h2>\n\n<p>Point a browser at port 9090 on the server, over HTTPS:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>https:\/\/10.0.1.50:9090<\/code><\/pre>\n\n\n<p>Cockpit serves a self-signed certificate out of the install, so the browser warns once on a fresh box. That is expected for a local admin console on the LAN; the remote-access section at the end replaces it with a trusted certificate. Sign in with a regular system user that has sudo rights, not root.<\/p>\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/06\/wm-cockpit-login-opensuse-leap.png\" alt=\"Cockpit login page on openSUSE Leap 16\" class=\"wp-image-169020\" title=\"\"><\/figure>\n\n\n<p>After login, Cockpit starts in limited access mode. The toggle in the top right escalates to administrative access by reusing your password, and that is the difference between viewing the system and changing it. Escalate when you need to start a service or edit storage, and stay limited when you are only looking.<\/p>\n\n<h2>Read the system at a glance<\/h2>\n\n<p>The Overview page is the landing screen and the fastest health check you have. It shows CPU and memory load, the machine identity, uptime, and the configuration shortcuts (hostname, system time, performance profile, cryptographic policy) that used to live in separate YaST modules.<\/p>\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/06\/wm-cockpit-overview-opensuse-leap.png\" alt=\"Cockpit system overview on openSUSE Leap 16\" class=\"wp-image-169021\" title=\"\"><\/figure>\n\n\n<p>The &#8220;View metrics and history&#8221; link is the one to remember. It opens a time-series view of CPU, memory, disk, and network that is enough to catch a runaway process or a memory leak without installing a full monitoring stack. For a single box or a handful of servers, that built-in history often answers the question before you reach for Prometheus.<\/p>\n\n<h2>Manage systemd services<\/h2>\n\n<p>The Services page lists every systemd unit with its active and enabled state, split across Services, Targets, Sockets, Timers, and Paths. The filter row narrows by name or by state, which is how you find the one failed unit in a list of two hundred.<\/p>\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/06\/wm-cockpit-services-opensuse-leap.png\" alt=\"Cockpit systemd services on openSUSE Leap 16\" class=\"wp-image-169022\" title=\"\"><\/figure>\n\n\n<p>Click any unit to open its detail page, where you start, stop, restart, enable, or disable it, and read its recent journal output inline. In practice this means a colleague can recover a stuck service from the browser without learning the full systemctl and journalctl vocabulary first, while every action they take is still a normal systemd operation you can audit.<\/p>\n\n<h2>Work with storage and Btrfs snapshots<\/h2>\n\n<p>Storage is where Cockpit earns its place on a Leap box, because Leap installs on Btrfs with Snapper by default. The Storage page draws the disks, partitions, filesystems, and mount points, with live read and write throughput graphs at the top.<\/p>\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/06\/wm-cockpit-storage-opensuse-leap.png\" alt=\"Cockpit storage and Btrfs subvolumes on openSUSE Leap 16\" class=\"wp-image-169023\" title=\"\"><\/figure>\n\n\n<p>Expand the Btrfs volume and you see the subvolume tree, including the Snapper snapshots under the snapshots subvolume. That is the visual companion to the command-line rollback workflow: Snapper still takes the automatic pre and post snapshots around each zypper transaction, and Cockpit lets you see them and the space they consume. When you do need to roll back a bad update, you still do it from the boot menu and the shell, which the <a href=\"https:\/\/computingforgeeks.com\/things-to-do-after-installing-opensuse-leap\/\">post-install guide<\/a> walks through.<\/p>\n\n<h2>Keep the system patched<\/h2>\n\n<p>The Software Updates page is the packagekit front end. It checks the repositories, lists the available updates with their versions and severities, and lets you apply them individually or all at once.<\/p>\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/06\/wm-cockpit-software-updates-opensuse-leap.png\" alt=\"Cockpit software updates on openSUSE Leap 16\" class=\"wp-image-169024\" title=\"\"><\/figure>\n\n\n<p>For interactive patching this is fine, and the severity column helps you prioritize security fixes. For anything scripted or scheduled, the command line is still the right tool, and the <a href=\"https:\/\/computingforgeeks.com\/zypper-command-cheat-sheet\/\">zypper command reference<\/a> covers the patch and dup workflows. One caveat: on an immutable host like Leap Micro the regular updates page does not apply, because those systems update transactionally; there Cockpit uses a separate transactional-update module instead.<\/p>\n\n<h2>Troubleshoot SELinux without leaving the browser<\/h2>\n\n<p>This is the section that justifies adding a module, because Leap 16 is one of the rare SUSE systems that ships with SELinux in enforcing mode by default. Confirm the mode from the shell first:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>sudo getenforce<\/code><\/pre>\n\n\n<p>On a default Leap 16 install this returns enforcing:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>Enforcing<\/code><\/pre>\n\n\n<p>The SELinux module is not part of the base console, so install it and reload the socket to pick it up:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>sudo zypper install cockpit-selinux\nsudo systemctl restart cockpit.socket<\/code><\/pre>\n\n\n<p>The SELinux page then shows the current policy state and, more usefully, any access-control denials the kernel has logged.<\/p>\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/06\/wm-cockpit-selinux-opensuse-leap.png\" alt=\"Cockpit SELinux policy page on openSUSE Leap 16\" class=\"wp-image-169025\" title=\"\"><\/figure>\n\n\n<p>When a denial appears, each alert carries a &#8220;View automation script&#8221; button that turns the denial into the exact policy adjustment that allows it. That is the feature to lean on: instead of telling readers to disable SELinux when a service misbehaves, which is the wrong fix, you read the denial here and apply the targeted rule. Enforcing stays on, and the service works.<\/p>\n\n<h2>Run commands in the built-in terminal<\/h2>\n\n<p>Cockpit ships a full terminal in the browser, scoped to the logged-in user. It is the pressure valve for everything the graphical modules do not cover, and it means a remote session over the console alone is enough to administer the box end to end.<\/p>\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/06\/wm-cockpit-terminal-opensuse-leap.png\" alt=\"Cockpit web terminal on openSUSE Leap 16\" class=\"wp-image-169026\" title=\"\"><\/figure>\n\n\n<p>The terminal runs as your user, so privileged commands still need sudo, exactly as they would over SSH. Treat it as a convenience for quick checks and one-off fixes rather than a replacement for a proper SSH session in a real terminal multiplexer when you are doing sustained work.<\/p>\n\n<h2>Add the optional modules you actually need<\/h2>\n\n<p>The base install is intentionally lean. Cockpit&#8217;s functionality grows through add-on packages, and because the web service is socket-activated, installing a module you use occasionally costs nothing while it sits idle. The ones worth knowing:<\/p>\n\n<ul>\n<li><code>cockpit-podman<\/code> manages Podman containers and images from the console.<\/li>\n<li><code>cockpit-machines<\/code> adds a libvirt and KVM virtual-machine manager.<\/li>\n<li><code>cockpit-selinux<\/code> is the SELinux troubleshooter covered above.<\/li>\n<li><code>cockpit-repos<\/code> manages the zypper repositories through the UI.<\/li>\n<li><code>cockpit-kdump<\/code> configures kernel crash dumps.<\/li>\n<\/ul>\n\n<p>Install the set you want in one transaction, then reload the socket so the new pages appear:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>sudo zypper install cockpit-podman cockpit-machines cockpit-repos cockpit-kdump\nsudo systemctl restart cockpit.socket<\/code><\/pre>\n\n\n<p>The discipline here is to add only what that host actually does. A container host gets cockpit-podman, a virtualization host gets cockpit-machines, and a plain application server gets neither. Fewer modules means a smaller attack surface and a cleaner console.<\/p>\n\n<h2>Expose Cockpit safely for remote administration<\/h2>\n\n<p>Port 9090 on a self-signed certificate is fine inside a trusted LAN, but it is not what you want facing the internet. There are two clean ways to reach a console remotely, and they suit different needs.<\/p>\n\n<p>The simplest is to not expose Cockpit at all and tunnel over SSH instead. From your workstation, forward the local port to the server and browse to the local end:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>ssh -L 9090:localhost:9090 geek@10.0.1.50<\/code><\/pre>\n\n\n<p>With that session open, <code>https:\/\/localhost:9090<\/code> on your machine reaches the console over the encrypted SSH channel, and nothing new is exposed on the server. For occasional administration this is the safest option because it adds no public listener.<\/p>\n\n<p>When several people need browser access without an SSH client, put a reverse proxy with a real certificate in front. Install nginx and the Let&#8217;s Encrypt client:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>sudo zypper install nginx certbot python3-certbot-nginx<\/code><\/pre>\n\n\n<p>Cockpit refuses proxied connections from an unknown origin by default, so tell it which hostname to trust. Open its config:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>sudo vim \/etc\/cockpit\/cockpit.conf<\/code><\/pre>\n\n\n<p>Add the origin and the forwarded-protocol header, replacing the hostname with your own:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>[WebService]\nOrigins = https:\/\/cockpit.example.com wss:\/\/cockpit.example.com\nProtocolHeader = X-Forwarded-Proto<\/code><\/pre>\n\n\n<p>Now create the nginx virtual host. openSUSE loads server blocks from the vhosts directory:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>sudo vim \/etc\/nginx\/vhosts.d\/cockpit.conf<\/code><\/pre>\n\n\n<p>The proxy has to pass the WebSocket upgrade through, otherwise the terminal and live graphs hang. Use this server block, again substituting your hostname:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>server {\n    listen 80;\n    server_name cockpit.example.com;\n\n    location \/ {\n        proxy_pass https:\/\/127.0.0.1:9090;\n        proxy_set_header Host $host;\n        proxy_set_header X-Forwarded-Proto $scheme;\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection \"upgrade\";\n        proxy_buffering off;\n        gzip off;\n    }\n}<\/code><\/pre>\n\n\n<p>Enable nginx and request the certificate. Certbot edits the vhost in place to add the TLS listener and the HTTP-to-HTTPS redirect:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>sudo systemctl enable --now nginx\nsudo certbot --nginx -d cockpit.example.com<\/code><\/pre>\n\n\n<p>This is the HTTP-01 challenge, which works with any DNS provider as long as the hostname resolves to the server and port 80 is reachable. If the box sits on a private network with no public port 80, switch to a DNS-01 challenge with your provider&#8217;s certbot plugin instead. Either way, finish by closing 9090 at the firewall so the console is reachable only through the proxy:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>sudo firewall-cmd --permanent --remove-service=cockpit\nsudo firewall-cmd --reload<\/code><\/pre>\n\n\n<p>With that in place you reach the console at your own hostname on a trusted certificate, every request rides HTTPS, and the only public surface is the proxy you control. That is the configuration to run in production, and it scales the same way on SUSE Linux Enterprise Server 16 when you promote the host. For the wider first-day setup that surrounds this, the <a href=\"https:\/\/computingforgeeks.com\/things-to-do-after-installing-opensuse-leap\/\">things-to-do-after-install guide<\/a> and the <a href=\"https:\/\/computingforgeeks.com\/install-opensuse-leap-16\/\">Leap 16 install walkthrough<\/a> are the companion pieces.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>YaST is gone in openSUSE Leap 16, and the replacement most administrators reach for day to day is Cockpit, a web console that ships in the default install. The decision Cockpit makes for you is a sensible one. Instead of a heavy, always-running admin stack, you get a lightweight service that activates only when you &#8230; <a title=\"Manage openSUSE Leap with Cockpit: the YaST Replacement\" class=\"read-more\" href=\"https:\/\/computingforgeeks.com\/cockpit-web-console-opensuse-leap\/\" aria-label=\"Read more about Manage openSUSE Leap with Cockpit: the YaST Replacement\">Read more<\/a><\/p>\n","protected":false},"author":17,"featured_media":169029,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[47,50],"tags":[282,9986],"cfg_series":[39887],"class_list":["post-169030","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux","category-linux-tutorials","tag-linux","tag-opensuse","cfg_series-opensuse-leap-16"],"_links":{"self":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/169030","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/users\/17"}],"replies":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/comments?post=169030"}],"version-history":[{"count":2,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/169030\/revisions"}],"predecessor-version":[{"id":169035,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/169030\/revisions\/169035"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/media\/169029"}],"wp:attachment":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/media?parent=169030"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/categories?post=169030"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/tags?post=169030"},{"taxonomy":"cfg_series","embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/cfg_series?post=169030"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}