<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="https://dev1galaxy.org/extern.php?action=feed&amp;fid=7&amp;type=rss" rel="self" type="application/rss+xml" />
		<title><![CDATA[Dev1 Galaxy Forum / Documentation]]></title>
		<link>https://dev1galaxy.org/index.php</link>
		<description><![CDATA[The most recent topics at Dev1 Galaxy Forum.]]></description>
		<lastBuildDate>Sun, 12 Apr 2026 01:03:17 +0000</lastBuildDate>
		<generator>FluxBB</generator>
		<item>
			<title><![CDATA[Installation and Setup: Steam on Devuan for Hyprland]]></title>
			<link>https://dev1galaxy.org/viewtopic.php?id=7904&amp;action=new</link>
			<description><![CDATA[<p>Steam is a popular game distribution platform by Valve. Since Hyprland is a Wayland compositor, Steam requires additional setup to run on a Wayland session because the Steam client itself is an X11-only application and lacks native Wayland support.</p><h5>Login as a root user</h5><p><span class="bbc">su -</span> cleanly resets all environment variables, changes the working directory to the target user&#039;s home directory, and sources the target user&#039;s profile scripts, simulating a fresh login as root:</p><div class="codebox"><pre><code>su -</code></pre></div><h5>Enable 32-bit architecture support</h5><p>Steam requires 32-bit architecture support libraries and proprietary components, so enable it:</p><div class="codebox"><pre><code>dpkg --add-architecture i386</code></pre></div><h5>Enable non-free &amp; contrib repository sources</h5><p>The Steam installer package resides in the <span class="bbc">contrib</span> repository, and the <span class="bbc">non-free</span> repository provides the essential 32-bit (i386) graphics drivers, Mesa libraries, and other hardware-specific components required for Steam to function and for games to run correctly. Ensure that both repositories are active in your sources list for your release. Depending on which source list is currently active on your PC, fill in the following information on one of these files:</p><div class="quotebox"><blockquote><div><p><strong>⚠️WARNING</strong><br />Having the same repository defined in both <span class="bbc">/etc/apt/sources.list</span> and <span class="bbc">/etc/apt/sources.list.d/devuan.sources</span> can lead to duplicate downloads of package metadata (like Packages and Sources files) during apt update. While APT is designed to de-duplicate packages and won&#039;t install the same package twice, it will still download the same repository metadata multiple times if the source is listed redundantly in different files or formats. This results in wasted bandwidth, longer update times, and warning messages like <span class="bbc">Target Packages is configured multiple times</span>. To avoid this, ensure each repository is defined only once, preferably using a single format.</p></div></blockquote></div><div class="quotebox"><blockquote><div><p><strong>❗IMPORTANT</strong><br />The following commands use the <span class="bbc">ceres</span> (Devuan Unstable) release. It <em>might</em> be necessary to have the unstable release repos enabled, instead of stable, to ensure the proper Hyprland packages are installed. If your current release is Devuan Stable (such as <span class="bbc">excalibur</span> in 2026), and unstable is not required, it would be best to keep the stable release keyword in the file.</p></div></blockquote></div><p>1. Within <span class="bbc">/etc/apt/sources.list</span>:</p><div class="codebox"><pre><code>deb http://deb.devuan.org/merged ceres main non-free non-free-firmware contrib</code></pre></div><p>2. Within <span class="bbc">/etc/apt/sources.list.d/devuan.sources</span>:</p><div class="codebox"><pre><code># Modernized from /etc/apt/sources.list
Types: deb
URIs: http://deb.devuan.org/merged/
Suites: ceres
Components: main non-free non-free-firmware contrib
Signed-By: /usr/share/keyrings/devuan-archive-keyring.gpg</code></pre></div><h5>Update repositories and install Steam</h5><p>After enabling the required repositories, update your package lists:</p><div class="codebox"><pre><code>sudo apt update</code></pre></div><p>Install the <span class="bbc">steam-installer</span> package using:</p><div class="codebox"><pre><code>sudo apt install steam-installer</code></pre></div><h5>Install and set up xwayland</h5><p>The Steam client requires <span class="bbc">xwayland</span> to run on a Wayland session because the Steam client itself is an X11-only application and lacks native Wayland support. If you&#039;re experiencing a display crash or the &quot;Could not open connection to X&quot; error, it&#039;s likely because Steam cannot connect to an X server. Currently, under a Wayland session, this is handled by <span class="bbc">xwayland</span>, which acts as a compatibility layer allowing X11 applications like Steam to run.</p><p>Install <span class="bbc">xwayland</span> via:</p><div class="codebox"><pre><code>sudo apt install xwayland</code></pre></div><p>Verify <span class="bbc">xwayland</span> is active by running by printing the value of the <span class="bbc">$DISPLAY</span> enviroment variable. This should return <span class="bbc">:0</span>:</p><div class="codebox"><pre><code>echo $DISPLAY</code></pre></div><p>If the DISPLAY variable is not set, you can set it manually. The command <span class="bbc">export DISPLAY=:0</span> sets the DISPLAY environment variable to <span class="bbc">:0</span>, telling graphical (a la X11) applications to render their graphical interface on the first local display (screen 0) of the local X server:</p><div class="codebox"><pre><code>export DISPLAY=:0</code></pre></div><h5>Restart Wayland session</h5><p>Restart your Wayland session to ensure <span class="bbc">xwayland</span> starts with the compositor; an easy way to do that for Hyprland specifically would be:</p><div class="codebox"><pre><code>hyprctl dispatch exit
dbus-run-session start-hyprland</code></pre></div><h5>Launch Steam</h5><p>Finally, launch Steam from the application menu or via the terminal:</p><div class="codebox"><pre><code>steam</code></pre></div><p>By following these steps, you should be able to install and run Steam on your Devuan system using a Wayland-based desktop environment like Hyprland.</p>]]></description>
			<author><![CDATA[dummy@example.com (wolfchar)]]></author>
			<pubDate>Sun, 12 Apr 2026 01:03:17 +0000</pubDate>
			<guid>https://dev1galaxy.org/viewtopic.php?id=7904&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[[HowTo] Install Gitea on Devuan 5]]></title>
			<link>https://dev1galaxy.org/viewtopic.php?id=6618&amp;action=new</link>
			<description><![CDATA[<p>Never heard about Forgejo. Seems an interesting choice. Gitea served me very well for some time. I plan to switch my mini-server to Devuan. I only store important files there and I setup a small Gitea server. Now I have Debian on it. I like Devuan because is more transparent not having systemd and I don&#039;t have the problems I had in systemd: hanging shutdowns especially.<br />Forgejo seems like a fallback in case gitea change their licensing or some big company buys them.</p>]]></description>
			<author><![CDATA[dummy@example.com (ovi)]]></author>
			<pubDate>Tue, 07 Apr 2026 14:52:49 +0000</pubDate>
			<guid>https://dev1galaxy.org/viewtopic.php?id=6618&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[[HowTo] Install Forgejo with self signed cert on Devuan 6]]></title>
			<link>https://dev1galaxy.org/viewtopic.php?id=7889&amp;action=new</link>
			<description><![CDATA[<p>Forgejo, an alternative to Gitea.<br /><a href="https://forgejo.org" rel="nofollow">https://forgejo.org</a></p><p>Kernel version: 6.12.48+deb13-amd64<br />Binary file: forgejo-13.0.3-linux-amd64<br />Partition scheme: / 12%, swap 12%, /home -1<br />Does these matters? I don&#039;t know but I have tried this steps only on systems having exactly the same specs like above, so if you get any error message related for example to swap memory and you have no swap then I won&#039;t know what to tell you but create a swap partition and try again.</p><p># First, make sure the domain/host name on /etc/hosts it&#039;s like: IP &lt;FQDN&gt; &lt;hostname&gt;, for example for a local domain /etc/hosts should be like:<br />127.0.0.1&#160; &#160; localhost<br />192.168.1.10 myhost.mydomain.home myhost<br /># Where 192.168.1.10 is the local network IP for your local forgejo host, to verify it then execute:</p><div class="codebox"><pre><code>hostname -f</code></pre></div><p># The result should be for example:<br /><span class="bbc">myhost.mydomain.home</span><br /># This is a must since later we will use the variables FQDN and HOSTNAME to retreive those values automatically <br /># to generate the self signed cert and to avoid mistyping errors that could make the setup completely fail.</p><p># Install dependencies</p><div class="codebox"><pre><code>sudo apt install -y git git-lfs nginx openssl</code></pre></div><p># Download and install binary</p><div class="codebox"><pre><code>wget https://codeberg.org/forgejo/forgejo/releases/download/v13.0.3/forgejo-13.0.3-linux-amd64
chmod +x forgejo-13.0.3-linux-amd64
sudo cp forgejo-13.0.3-linux-amd64 /usr/local/bin/forgejo
sudo chmod 755 /usr/local/bin/forgejo</code></pre></div><p># Create git user on the system. Forgejo will run as that user, and when accessing git through <br /># SSH (which is the default), this user is part of the URL (for example <br /># in: git clone git@git.example.com:YourOrg/YourRepo.git the &quot;git&quot; at the left of @ is the user you’ll create now).</p><div class="codebox"><pre><code>sudo adduser --system --shell /bin/bash --gecos &#039;Git Version Control&#039; \
  --group --disabled-password --home /home/git git</code></pre></div><p># Create the directory where Forgejo’s config, called app.ini it&#039;s stored in. Initially it needs to be writable by Forgejo, <br /># but after the installation you can make it read-only even for Forgejo because then it shouldn’t modify it anymore.</p><div class="codebox"><pre><code>sudo mkdir -p /etc/forgejo/{ssl}
sudo chown -R root:git /etc/forgejo &amp;&amp; sudo chmod -R 770 /etc/forgejo</code></pre></div><p># In this case, below will use the path &quot;/home/git/&quot; where Forgejo will store its data, including your repositories,&#160; <br /># this in order to make it easier to preserve and backup when ussing separated /home partition and SQLite database, <br /># but that value can be modified to anything that suits best for you if you know what are you doing.</p><p># Create Forgejo service file, copy and paste from #!/bin/sh line to &quot;exit 0&quot; line and save.</p><div class="codebox"><pre><code>sudo nano /etc/init.d/forgejo</code></pre></div><p><span class="bbc">#!/bin/sh<br />### BEGIN INIT INFO<br /># Provides:&#160; &#160; &#160; &#160; &#160; forgejo<br /># Required-Start:&#160; &#160; $remote_fs $network $syslog<br /># Required-Stop:&#160; &#160; &#160;$remote_fs $network $syslog<br /># Should-Start:&#160; &#160; &#160; $local_fs<br /># Should-Stop:&#160; &#160; &#160; &#160;$local_fs<br /># Default-Start:&#160; &#160; &#160;2 3 4 5<br /># Default-Stop:&#160; &#160; &#160; 0 1 6<br /># Short-Description: Forgejo Git server daemon<br /># Description:&#160; &#160; &#160; &#160;Starts, stops, and manages the Forgejo service.<br />### END INIT INFO</span></p><p><span class="bbc"># Where Forgejo lives (binary, config, data)<br />FORGEJO_ROOT=&quot;/home/git/lib/forgejo&quot;<br />FORGEJO_BINARY=&quot;/usr/local/bin/forgejo&quot;<br />FORGEJO_WORK_DIR=&quot;/home/git/lib/forgejo&quot;<br />FORGEJO_USER=&quot;git&quot;<br />FORGEJO_GROUP=&quot;git&quot;</span></p><p><span class="bbc"># Config file<br />FORGEJO_CONFIG=&quot;/etc/forgejo/app.ini&quot;</span></p><p><span class="bbc"># Log files – same locations used by the systemd unit<br />FORGEJO_LOG_DIR=&quot;${FORGEJO_ROOT}/log&quot;<br />STDOUT_LOG=&quot;${FORGEJO_LOG_DIR}/stdout.log&quot;<br />STDERR_LOG=&quot;${FORGEJO_LOG_DIR}/stderr.log&quot;</span></p><p><span class="bbc"># PID file – used for status checks and clean shutdowns<br />PIDFILE=&quot;/var/run/forgejo.pid&quot;</span></p><p><span class="bbc"># Extra flags you might want to pass (e.g., --config)<br />DAEMON_OPTS=&quot;web --config ${FORGEJO_CONFIG}&quot;</span></p><p><span class="bbc">log_msg() {<br />&#160; &#160; echo &quot;[forgejo] $*&quot;<br />}</span></p><p><span class="bbc"># Ensure the binary exists before we try anything<br />[ -x &quot;${FORGEJO_BINARY}&quot; ] || {<br />&#160; &#160; log_msg &quot;Executable not found at ${FORGEJO_BINARY}. Aborting.&quot;<br />&#160; &#160; exit 1<br />}</span></p><p><span class="bbc"># Create log directory if missing<br />[ -d &quot;${FORGEJO_LOG_DIR}&quot; ] || mkdir -p &quot;${FORGEJO_LOG_DIR}&quot;<br />chown ${FORGEJO_USER}:${FORGEJO_GROUP} &quot;${FORGEJO_LOG_DIR}&quot;</span></p><p><span class="bbc">do_start() {<br />&#160; &#160; log_msg &quot;Starting Forgejo…&quot;<br />&#160; &#160; # Run as the dedicated user, detach, and capture PID<br />&#160; &#160; start-stop-daemon --start \<br />&#160; &#160; &#160; &#160; --quiet \<br />&#160; &#160; &#160; &#160; --background \<br />&#160; &#160; &#160; &#160; --make-pidfile \<br />&#160; &#160; &#160; &#160; --pidfile &quot;${PIDFILE}&quot; \<br />&#160; &#160; &#160; &#160; --chuid &quot;${FORGEJO_USER}:${FORGEJO_GROUP}&quot; \<br />&#160; &#160; &#160; &#160; --exec &quot;${FORGEJO_BINARY}&quot; \<br />&#160; &#160; &#160; &#160; -- ${DAEMON_OPTS} &gt;&gt;&quot;${STDOUT_LOG}&quot; 2&gt;&gt;&quot;${STDERR_LOG}&quot;<br />&#160; &#160; RET=$?<br />&#160; &#160; [ $RET -eq 0 ] &amp;&amp; log_msg &quot;Forgejo started (PID $(cat ${PIDFILE}))&quot;<br />&#160; &#160; return $RET<br />}</span></p><p><span class="bbc">do_stop() {<br />&#160; &#160; log_msg &quot;Stopping Forgejo…&quot;<br />&#160; &#160; if [ -f &quot;${PIDFILE}&quot; ]; then<br />&#160; &#160; &#160; &#160; PID=$(cat &quot;${PIDFILE}&quot;)<br />&#160; &#160; &#160; &#160; start-stop-daemon --stop --quiet --pid &quot;${PID}&quot; --retry=TERM/30/KILL/5<br />&#160; &#160; &#160; &#160; RET=$?<br />&#160; &#160; &#160; &#160; [ $RET -eq 0 ] &amp;&amp; rm -f &quot;${PIDFILE}&quot; &amp;&amp; log_msg &quot;Forgejo stopped&quot;<br />&#160; &#160; else<br />&#160; &#160; &#160; &#160; log_msg &quot;No PID file found – is Forgejo already stopped?&quot;<br />&#160; &#160; &#160; &#160; RET=1<br />&#160; &#160; fi<br />&#160; &#160; return $RET<br />}</span></p><p><span class="bbc">do_restart() {<br />&#160; &#160; do_stop &amp;&amp; do_start<br />}</span></p><p><span class="bbc">do_status() {<br />&#160; &#160; if [ -f &quot;${PIDFILE}&quot; ]; then<br />&#160; &#160; &#160; &#160; PID=$(cat &quot;${PIDFILE}&quot;)<br />&#160; &#160; &#160; &#160; if kill -0 &quot;$PID&quot; 2&gt;/dev/null; then<br />&#160; &#160; &#160; &#160; &#160; &#160; echo &quot;Forgejo is running (PID $PID)&quot;<br />&#160; &#160; &#160; &#160; &#160; &#160; return 0<br />&#160; &#160; &#160; &#160; else<br />&#160; &#160; &#160; &#160; &#160; &#160; echo &quot;Forgejo PID file exists but process is dead&quot;<br />&#160; &#160; &#160; &#160; &#160; &#160; return 1<br />&#160; &#160; &#160; &#160; fi<br />&#160; &#160; else<br />&#160; &#160; &#160; &#160; echo &quot;Forgejo is not running&quot;<br />&#160; &#160; &#160; &#160; return 3<br />&#160; &#160; fi<br />}</span></p><p><span class="bbc">case &quot;$1&quot; in<br />&#160; &#160; start)<br />&#160; &#160; &#160; &#160; do_start<br />&#160; &#160; &#160; &#160; ;;<br />&#160; &#160; stop)<br />&#160; &#160; &#160; &#160; do_stop<br />&#160; &#160; &#160; &#160; ;;<br />&#160; &#160; restart|force-reload)<br />&#160; &#160; &#160; &#160; do_restart<br />&#160; &#160; &#160; &#160; ;;<br />&#160; &#160; status)<br />&#160; &#160; &#160; &#160; do_status<br />&#160; &#160; &#160; &#160; ;;<br />&#160; &#160; *)<br />&#160; &#160; &#160; &#160; echo &quot;Usage: $0 {start|stop|restart|status}&quot;<br />&#160; &#160; &#160; &#160; exit 2<br />&#160; &#160; &#160; &#160; ;;<br />esac</span></p><p><span class="bbc">exit 0</span></p><p># Make it executable</p><div class="codebox"><pre><code>sudo chmod +x /etc/init.d/forgejo</code></pre></div><p># Enable the service auto-start at boot</p><div class="codebox"><pre><code>sudo update-rc.d forgejo defaults</code></pre></div><p># Generate self signed cert and key</p><div class="codebox"><pre><code>sudo openssl genrsa -out /etc/nginx/ssl/$(hostname).key 4096
sudo openssl req -x509 -new -nodes -key /etc/nginx/ssl/$(hostname).key -sha256 -days 365 -subj &quot;/CN=$(hostname -f)&quot; -reqexts v3_req -extensions v3_ca -out /etc/nginx/ssl/$(hostname).crt</code></pre></div><p># Change cert and key group permissions but maintaining root ownership</p><div class="codebox"><pre><code>sudo chgrp git /etc/nginx/ssl/$(hostname).crt
sudo chmod 644 /etc/nginx/ssl/$(hostname).crt
sudo chgrp git /etc/nginx/ssl/$(hostname).key
sudo chmod 600 /etc/nginx/ssl/$(hostname).key</code></pre></div><p># Prevent git error: server verification failed: certificate signer not trusted for your local repo/server</p><div class="codebox"><pre><code>git config --global http.&quot;https://$(hostname -f)/&quot;.sslCAInfo /etc/nginx/ssl/$(hostname).crt</code></pre></div><p># Copy the new certificate system wide (optional):</p><div class="codebox"><pre><code>sudo cp /etc/nginx/ssl/$(hostname).crt /usr/local/share/ca-certificates/
sudo update-ca-certificates</code></pre></div><p># To prevent error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413</p><div class="codebox"><pre><code>sudo nano /etc/nginx/nginx.conf</code></pre></div><p># Add this line inside the &quot;http {&quot; block</p><p><span class="bbc">&#160; &#160; &#160; &#160; # To prevent error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 41<br />&#160; &#160; &#160; &#160; client_max_body_size 500M;&#160; # Increase limit from default 1MB to 500M</span></p><p># Create the initial forgejo settings: copy, paste and enter (to pass the hostname values).</p><div class="codebox"><pre><code>sudo tee /etc/forgejo/app.ini &gt; /dev/null &lt;&lt;&#039;EOF&#039;
[server]
PROTOCOL                   = http
DOMAIN                     = $(hostname -d)
ROOT_URL                   = https://$(hostname -f)
APP_DATA_PATH              = /home/git/data
LOCAL_ROOT_URL             =

[session]
COOKIE_SECURE              = true
EOF</code></pre></div><p># Change /etc/forgejo/app.ini ownership</p><div class="codebox"><pre><code>sudo chown git:git /etc/forgejo/app.ini
sudo chmod 644 /etc/forgejo/app.ini</code></pre></div><p># Create the NGINX site configuration: copy, paste, press enter.</p><div class="codebox"><pre class="vscroll"><code>sudo tee /etc/nginx/sites-available/forgejo.conf &gt; /dev/null &lt;&lt;&#039;EOF&#039;
# --------------------------------------------------------------
# HTTP → HTTPS redirect (listen on port 80)
# --------------------------------------------------------------
server {
    listen 80;
    listen [::]:80;
    server_name $(hostname -f);
    
    # Redirect every request to the same URL but with https
    return 301 https://$host$request_uri;
}

# --------------------------------------------------------------
# TLS termination + reverse‑proxy to Forgejo (listen on 443)
# --------------------------------------------------------------
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    http2 on;
    server_name $(hostname -f);

    # ----- TLS certificates -----
    ssl_certificate     /etc/nginx/ssl/$(hostname).crt;
    ssl_certificate_key /etc/nginx/ssl/$(hostname).key;

    # ----- Recommended SSL settings (Mozilla intermediate profile) -----
    ssl_protocols       TLSv1.2 TLSv1.3;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_timeout 1d;
    ssl_session_cache   shared:SSL:10m;

    # ----- HSTS (force browsers to stay on HTTPS) -----
    add_header Strict-Transport-Security &quot;max-age=31536000; includeSubDomains; preload&quot; always;

    # ----- Proxy settings -----
    location / {
        # Forgejo runs internally on HTTP port 3000 (unchanged)
        proxy_pass http://127.0.0.1:3000;

        # Preserve original host and scheme for Forgejo’s own link generation
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # Optional: increase timeout for large git pushes
        proxy_read_timeout 300s;
        proxy_send_timeout 300s;
    }

    # ----- Optional: static assets cache (speed up UI) -----
    location ~* \.(css|js|png|jpg|jpeg|svg|ico|woff2?)$ {
        expires 30d;
        add_header Cache-Control &quot;public, immutable&quot;;
        try_files $uri @forgejo;
    }

    # Fallback to the main proxy block if the static file isn’t found
    location @forgejo {
        proxy_pass http://127.0.0.1:3000;
    }
}
EOF</code></pre></div><p># Enable the site &amp; test the NGINX config</p><div class="codebox"><pre><code>sudo ln -sf /etc/nginx/sites-available/forgejo.conf /etc/nginx/sites-enabled/</code></pre></div><p># Test syntax (very important!)</p><div class="codebox"><pre><code>sudo nginx -t</code></pre></div><p># You should see:<br /><span class="bbc">nginx: the configuration file /etc/nginx/nginx.conf syntax is ok<br />nginx: configuration file /etc/nginx/nginx.conf test is successful</span></p><p># Open firewall ports (if applicable)<br /># If you have ufw, firewalld, or a cloud‑provider security group, allow only 80 and 443 inbound:</p><p># UFW example</p><div class="codebox"><pre><code>sudo ufw allow 80/tcp
sudo ufw allow 443/tcp</code></pre></div><p># (Optionally deny direct access to 3000 from outside)</p><div class="codebox"><pre><code>sudo ufw deny 3000/tcp</code></pre></div><p># For firewalld:</p><div class="codebox"><pre><code>sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --remove-port=3000/tcp --permanent   # optional
sudo firewall-cmd --reload</code></pre></div><p># Start both services </p><div class="codebox"><pre><code>sudo service forgejo start
sudo service nginx start</code></pre></div><p># Finally, open your browser and go to http://&lt;FQDN_here&gt; to finish the setup.<br /># Yes, of course you will get the warning of self signed cert but other than that everything will work as intended.</p>]]></description>
			<author><![CDATA[dummy@example.com (joser)]]></author>
			<pubDate>Mon, 06 Apr 2026 19:05:49 +0000</pubDate>
			<guid>https://dev1galaxy.org/viewtopic.php?id=7889&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[How to: Devuan 5 Daedalus an pipewire]]></title>
			<link>https://dev1galaxy.org/viewtopic.php?id=5867&amp;action=new</link>
			<description><![CDATA[<p>with enough luck by the end of this year (knocking on wood it will be sooner than that) shed will be able to provide a proper x-session-manager + user services in a way that can work with any non Desktop Environment in devuan stable.</p>]]></description>
			<author><![CDATA[dummy@example.com (EDX-0)]]></author>
			<pubDate>Sat, 21 Mar 2026 22:55:18 +0000</pubDate>
			<guid>https://dev1galaxy.org/viewtopic.php?id=5867&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[[HowTo] Use slimlock with xfce]]></title>
			<link>https://dev1galaxy.org/viewtopic.php?id=7820&amp;action=new</link>
			<description><![CDATA[<p><span class="bbc">slimlock</span> is included with the <em>slim</em> login manager. If you already have <em>slim</em> installed, there is no need to get another screenlocker utility. However, <em>slimlock</em> has one major difference to all other screenlockers: When called, it does not return with a success code until <em>after</em> the screen is unlocked. Other screenlockers return immediately and keep the screen locked.</p><p>If <span class="bbc">slimlock</span> is set as the lock command in <em>xfce4</em>, it will not work correctly with sleep security. (Xfce Settings → Power Manager → System → Lock screen when system is going to sleep) Since <em>xfce4</em> waits for the screenlocker to return before putting the system to sleep, the user sees the lock screen but the system will not sleep. Once the user unlocks the screen, <em>then</em> the system will go to sleep. Obviously this is not what the user wants.</p><p>Here&#039;s how to fix it.</p><p>Create the file <span class="bbc">/usr/local/bin/aslimlock.sh</span> with these contents:</p><div class="codebox"><pre><code>#!/bin/sh
/usr/bin/slimlock &amp;
sleep 1
pgrep --parent ${$} --full --exact &quot;/usr/bin/slimlock&quot;</code></pre></div><p>This script runs <span class="bbc">slimlock</span> asynchronously, ensures that it is still running after one second, and returns a success or error code depending on the status.</p><p>Ensure this script is given execute permissions.</p><p>Now set <span class="bbc">aslimlock.sh</span> as <em>xfce4</em>&#039;s lock command. </p><p>You can use the GUI: Navigate to Xfce Settings → Settings Editor → Channel: xfce4-session → Property: LockCommand; and enter <span class="bbc">/usr/local/bin/aslimlock.sh</span> in the Value field.</p><p>Alternatively, you can use the command line:<br /><span class="bbc">xfconf-query --channel &#039;xfce4-session&#039; --property &#039;/general/LockCommand&#039; --set &#039;/usr/local/bin/aslimlock.sh&#039;</span></p><p>The system will now correctly respond to a suspend request. The screen will lock and the system will enter sleep mode. On wake, the screen will be locked and awaiting a password.</p>]]></description>
			<author><![CDATA[dummy@example.com (Mercury)]]></author>
			<pubDate>Thu, 19 Feb 2026 18:10:02 +0000</pubDate>
			<guid>https://dev1galaxy.org/viewtopic.php?id=7820&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[An unofficial Guide to runit on Debian-derived distros]]></title>
			<link>https://dev1galaxy.org/viewtopic.php?id=7802&amp;action=new</link>
			<description><![CDATA[<p>Hi Mercury,</p><p>thanks for the guide! as it was said in other posts I haven&#039;t found yet the time to write a comprehensive guide/documentation to runit, for several reason:<br />time constrains of course, but also parts of the runit debian integration are still under development and I prefer to finish before writing a guide (it will be obsolete soon otherwise).<br />I try to keep manpages up to date though, so I suggest reading</p><div class="codebox"><pre><code>man invoke-run
man update-service
man cpsv</code></pre></div><p>Also I try to keep README files in runit and runit-servics packages up to date</p><div class="quotebox"><blockquote><div><p>/usr/share/doc/runit/README-*<br />/usr/share/doc/runit-services/README.gz</p></div></blockquote></div><p>If not installed by default (not sure), I suggest to install apt-listchanges package<br />to read the NEWS during the upgrade (I do write NEWS when there are important changes)</p><p>that said let me add few comments on top of your guide:</p><div class="quotebox"><blockquote><div><p>/etc/sv/<br />Contains installed (but not necessarily enabled) local services. Services installed and managed by the local admin and/or manually converted from other init systems (systemd, sysVinit) should exist here. Enabled services should be the targets of symbolic links in /etc/runit/runsvdir/default/ (see above)</p></div></blockquote></div><p>this is correct and is the desired end state, however there are still packages (getty-run, openssh-server, acpid, tor, irqbalance and few others)<br />that are using the legacy layout and install the service directory directly in /etc/sv/ (without metafiles, the legacy runit-helper is used instead of trigger_sv): I still have to organize the transition.</p><div class="quotebox"><blockquote><div><p>This important behavior lacks official documentation. At boot time, a service sync occurs.</p></div></blockquote></div><p>be aware that, as the name may suggest, trigger_sv run as a dpkg trigger at the end of each apt operation (install/remove/upgrade), so the sync happens at runtime; then a sync was added to stage 2 to ensure that the first time you boot runit after an init-switch (sysvinit --&gt; runit-init) the state of services is synched with defaults.<br />At runtime the trigger loop takes care of enable/disable services, but it also runs the second (&quot;upgrade&quot;) loop that make sure that running services are restarted (or reloaded) when their binary is upgraded.<br />The upgrade loop is very important for security: if the running instance is not upgraded it may still be affected by CVEs while the package changelog claims the issue is fixed..</p><div class="quotebox"><blockquote><div><p>There is no intended configurable way to override this behavior globally for all services, and there is no intended configurable way to prevent the runtime copies from being created. However, the following methods will work:</p><p>To disable all service sync and auto-enable behavior, edit /etc/runit/2 and comment out the call to /usr/lib/runit/trigger_sv. Be aware that a future update of runit is likely to erase this change and it will have to be re-applied.</p></div></blockquote></div><p>/etc/runit/2 is a conffile so dpkg will ask at upgrade if you want to keep your version or want to use the package version, no automatic overwrite will happen: but this wont stop the runtime dpkg trigger invocation.</p><p>If you want to override something (including metafiles) inside a service directory that is in /usr/share/runit/sv.current , the intended way is<br />create a copy in /etc/sv/ and maintain it by yourself (it won&#039;t be automatically overwirtten at upgrades, and there is no dpkg prompt so you have to import bugfixes by yourself).</p><p>(better if runit &gt;= 2.2.0-7 is used for this)<br />As example for cron, you can do<br />(make sure there is no /etc/sv/cron dir first)</p><div class="codebox"><pre><code>#cpsv p cron</code></pre></div><p>than you can remove any symlink and replace it with a real file that includes your changes<br />to inspect the diff later you can do</p><div class="codebox"><pre><code>#cpsv d cron</code></pre></div><p>if you want to override *all* services dir in /usr/share/runit/sv.current then writing copies in /etc/sv/ is no longer practical: the metafiles interface and cpsv are designed to allow to roll your local/private collection in place of services provided by packages, but I haven&#039;t tested this myself yet and the operation is dangerous if done at runtime (if a directory disappear from runsvdir directory, the service is stopped, so guess what can happen if you switch the target of symlinks in /usr/share/runit/ the wrong way..) so I won&#039;t document it here for now.</p><p>Best,<br />Lorenzo</p>]]></description>
			<author><![CDATA[dummy@example.com (Lorenzo)]]></author>
			<pubDate>Sat, 14 Feb 2026 16:23:34 +0000</pubDate>
			<guid>https://dev1galaxy.org/viewtopic.php?id=7802&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[[HowTo] Excalibur + MATE/Xfce: Remove the suspend/hibernate buttons]]></title>
			<link>https://dev1galaxy.org/viewtopic.php?id=7780&amp;action=new</link>
			<description><![CDATA[<p>I finally got around to trying this out (Mate). Works perfectly! Thanks.</p>]]></description>
			<author><![CDATA[dummy@example.com (Ron)]]></author>
			<pubDate>Sat, 14 Feb 2026 11:45:02 +0000</pubDate>
			<guid>https://dev1galaxy.org/viewtopic.php?id=7780&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[[SOLVED] struggling starting auto-cpufreq --daemon]]></title>
			<link>https://dev1galaxy.org/viewtopic.php?id=7771&amp;action=new</link>
			<description><![CDATA[<p>ok I&#039;ll test with the correction, thank you edx.</p><p>I mark this topic as RESOLVED</p>]]></description>
			<author><![CDATA[dummy@example.com (unixuser)]]></author>
			<pubDate>Tue, 03 Feb 2026 08:47:52 +0000</pubDate>
			<guid>https://dev1galaxy.org/viewtopic.php?id=7771&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[HOW TO: Install XLibre on Devuan]]></title>
			<link>https://dev1galaxy.org/viewtopic.php?id=7388&amp;action=new</link>
			<description><![CDATA[<p>I couldn&#039;t get this working on daedalus so I installed excalibur with openbox and haven&#039;t had any issues.</p>]]></description>
			<author><![CDATA[dummy@example.com (rations)]]></author>
			<pubDate>Thu, 29 Jan 2026 15:58:05 +0000</pubDate>
			<guid>https://dev1galaxy.org/viewtopic.php?id=7388&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[Install Adoptium Temurin OpenJDK Binaries via deb installer pkg repo]]></title>
			<link>https://dev1galaxy.org/viewtopic.php?id=7759&amp;action=new</link>
			<description><![CDATA[<p><a href="https://adoptium.net/" rel="nofollow">Eclipse Adoptium</a> provides prebuilt OpenJDK binaries from a fully open source set of build scripts and infrastructure. This is useful for the development and usage of certain Java applications. The <a href="https://adoptium.net/installation/linux#deb-installation-on-debian-or-ubuntu" rel="nofollow">Adoptium DEB installer package</a> allows you to do this on <em>Devuan</em> and derivative distributions, with slight modification.</p><div class="quotebox"><blockquote><div><p><strong><span style="color: purple">ℹ️ IMPORTANT</span></strong><br />The following name schemas are being used for this example:</p><div class="codebox"><pre><code>temurin-&lt;version&gt;-jdk
e.g.: temurin-8-jdk</code></pre></div><div class="codebox"><pre><code>https://packages.adoptium.net/artifactory/deb &lt;distribution-release&gt; main
e.g.: https://packages.adoptium.net/artifactory/deb trixie main</code></pre></div></div></blockquote></div><h5>## Steps</h5><h5>### Prerequisites</h5><p>&#160; &#160; Login as superuser—initializing a full login environment:</p><div class="codebox"><pre><code>su -</code></pre></div><p>&#160; &#160; Ensure the necessary packages are present:</p><div class="codebox"><pre><code>apt install -y wget apt-transport-https gpg</code></pre></div><p>&#160; &#160; Download the Eclipse Adoptium GPG key:</p><div class="codebox"><pre><code>wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --dearmor | tee /etc/apt/trusted.gpg.d/adoptium.gpg &gt; /dev/null</code></pre></div><p>&#160; &#160; </p><h5>### Configure the Eclipse Adoptium <span class="bbc">apt</span> repository</h5><p>&#160; &#160; </p><div class="quotebox"><blockquote><div><p><strong><span style="color: gold">⚠️ WARNING</span></strong><br />In the case of <em>Devuan</em>&#039;s distribution releases, the user has to replace <span class="bbc">&lt;distribution-release&gt;</span> with the <a href="https://www.devuan.org/os/releases" rel="nofollow">Debian release equivalent</a>. Check <a href="https://packages.adoptium.net/ui/native/deb/dists/" rel="nofollow">Adoptium&#039;s full list of supported distribution releases</a> for comparison.</p><p>An interesting example might include someone on Devuan <em>Ceres (indev, unstable)</em>, which doesn&#039;t have an equivalent release in Adoptium&#039;s repository. The example below defaults the most up-to-date stable release on Debian that Adoptium supports (<em>Trixie</em>):</p><div class="codebox"><pre><code>echo &quot;deb https://packages.adoptium.net/artifactory/deb trixie main&quot; &gt; /etc/apt/sources.list.d/adoptium.list</code></pre></div></div></blockquote></div><p>&#160; &#160; Create the <span class="bbc">adoptium.list</span> file, with the proper repository information for the package manager (<em>apt</em>) to source from:</p><div class="codebox"><pre><code>echo &quot;deb https://packages.adoptium.net/artifactory/deb &lt;distribution-release&gt; main&quot; &gt; /etc/apt/sources.list.d/adoptium.list</code></pre></div><p>&#160; &#160; Update <em>apt</em>&#039;s repositories:</p><div class="codebox"><pre><code>apt update</code></pre></div><p>&#160; &#160; </p><h5>### Installation</h5><p>Install the Temurin version required:</p><div class="codebox"><pre><code>apt install temurin-&lt;version&gt;-jdk</code></pre></div>]]></description>
			<author><![CDATA[dummy@example.com (wolfdaemon)]]></author>
			<pubDate>Thu, 22 Jan 2026 20:16:20 +0000</pubDate>
			<guid>https://dev1galaxy.org/viewtopic.php?id=7759&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[How to boot GRUB with HP Probook 4540s]]></title>
			<link>https://dev1galaxy.org/viewtopic.php?id=15&amp;action=new</link>
			<description><![CDATA[<p>In addition to the HP piece of garbage implementation of the EFI specification the default location and file that all others look for when booting is /boot/efi/EFI/BOOT/BOOTX64.EFI for a 64bit boot or a 32 named file for 32 bit boot. That file is a copy of the linux or windows .efi file used to boot with in their respective directories in the EFI directory in the EFI partition on the disk.</p><div class="quotebox"><blockquote><div><p>enter it blindly in HP UEFI interface in Customized Boot using backslashes, not forward slashes</p></div></blockquote></div><p>Of course you have to it is a fat32 file system it does not use forward slashes for a directory seperator.</p>]]></description>
			<author><![CDATA[dummy@example.com (RedGreen925)]]></author>
			<pubDate>Thu, 08 Jan 2026 18:07:57 +0000</pubDate>
			<guid>https://dev1galaxy.org/viewtopic.php?id=15&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[How to create an official mirror?]]></title>
			<link>https://dev1galaxy.org/viewtopic.php?id=7704&amp;action=new</link>
			<description><![CDATA[<p>Is this what you are looking for?&#160; This file is found in the root directory of all mirrors.&#160; I just picked one from the top of the list below:<br /><a href="https://sledjhamr.org/devuan/devuan_mirror_walkthrough.txt" rel="nofollow">https://sledjhamr.org/devuan/devuan_mir … hrough.txt</a></p><p>The list of all repositories:<br /><a href="https://pkgmaster.devuan.org/mirror_list.txt" rel="nofollow">https://pkgmaster.devuan.org/mirror_list.txt</a></p>]]></description>
			<author><![CDATA[dummy@example.com (nixer)]]></author>
			<pubDate>Mon, 29 Dec 2025 19:59:55 +0000</pubDate>
			<guid>https://dev1galaxy.org/viewtopic.php?id=7704&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[[HowTo] European keyboard layout]]></title>
			<link>https://dev1galaxy.org/viewtopic.php?id=7084&amp;action=new</link>
			<description><![CDATA[<p>I can confirm that eurkey isn&#039;t working in console. I was able to fix it by editing /etc/default/keyboard and changing XKBLAYOUT=&quot;us&quot; (or was it &quot;en&quot;?) to XKBLAYOUT=&quot;eu&quot; and then running &#039;/etc/init.d/console-setup restart&quot;.</p>]]></description>
			<author><![CDATA[dummy@example.com (fsmithred)]]></author>
			<pubDate>Sat, 13 Dec 2025 12:39:21 +0000</pubDate>
			<guid>https://dev1galaxy.org/viewtopic.php?id=7084&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[[HowTo] 2FA TOTPs for SSH without google-authenticator.]]></title>
			<link>https://dev1galaxy.org/viewtopic.php?id=7657&amp;action=new</link>
			<description><![CDATA[<h5>2FA TOTPs</h5><p>##On server side ### you can execute these via SSH as well.</p><p>#Install the required packages for TOTPs:</p><div class="codebox"><pre><code>sudo apt install -y oathtool libpam-oath qrencode keyutils</code></pre></div><p>#Make a backup copy of /etc/ssh/sshd_config</p><div class="codebox"><pre><code>sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config~</code></pre></div><p>#Update the SSH daemon configuration in /etc/ssh/sshd_config</p><div class="codebox"><pre><code>sudo nano /etc/ssh/sshd_config</code></pre></div><p># Make sure this options are enabled<br /><span class="bbc">ChallengeResponseAuthentication yes</span><br /><span class="bbc">KbdInteractiveAuthentication yes</span><br /><span class="bbc">UsePAM yes</span></p><p>#Generate a secure hex secret key for the current user using sha256sum and store it in keyctl to keep the key_id as variable only:</p><div class="codebox"><pre><code>KEY_ID=$(keyctl add user hex_secret $(head -15 /dev/urandom | sha256sum | cut -b 1-30) @s)</code></pre></div><p>&#160; &#160; &#160;<br />#Add the secret to the /etc/users.oath file without actually echoing it:</p><div class="codebox"><pre><code>echo &quot;HOTP/T30/6 $USER - $(keyctl pipe $KEY_ID)&quot; | sudo tee -a /etc/users.oath &gt; /dev/null</code></pre></div><p>&#160; <br />#File /etc/users.oath must be readable and writable only by root to maintain security.</p><div class="codebox"><pre><code>sudo chmod 600 /etc/users.oath</code></pre></div><p>&#160; &#160;<br /># Generate a QR code for the user’s authenticator app:</p><div class="codebox"><pre><code>TKNTITLE=&quot;Your token title here&quot;</code></pre></div><div class="codebox"><pre><code>BASE32_SECRET=$(oathtool --verbose --totp &quot;$(keyctl pipe $KEY_ID)&quot; --digits=6 -w 1 | grep Base32 | cut -d &#039; &#039; -f 3)</code></pre></div><div class="codebox"><pre><code>qrencode --type=ANSIUTF8 &quot;otpauth://totp/$TKNTITLE:$USER@$HOSTNAME?secret=$BASE32_SECRET&amp;issuer=$TKNTITLE&amp;digits=6&quot;</code></pre></div><p>#Scan the previous QR code with your Authenticator app.</p><p>#Configure PAM to use pam_oath.</p><div class="codebox"><pre><code>sudo nano /etc/pam.d/sshd</code></pre></div><p>#add the following two lines at the top of the file, before the @include common-auth line:<br /><span class="bbc"># TOTPs config</span><br /><span class="bbc">auth requisite pam_oath.so usersfile=/etc/users.oath window=20 digits=6</span></p><p>#Restart the SSH service to apply changes:</p><div class="codebox"><pre><code>sudo service ssh restart &amp;&amp; exit</code></pre></div><p># At this point your user can log in via SSH using a dynamically generated OTP from your authenticator app.<br /># Please notice this wont work from any workstations that you have SSH password-less authentication since the purpose for this guide is mostly to prevent brute force password attacks.</p><p>Now from you will have to enter an OTP (Authenticator app) and your user password after, the ssh login screen it will look like:</p><div class="codebox"><pre><code>(user@XX.XXX.X.XXX) One-time password (OATH) for `user&#039;:</code></pre></div><div class="codebox"><pre><code>(user@XX.XXX.X.XXX) Password:</code></pre></div><p># To disable the OTP auth then make the new /etc/ssh/sshd_config as backup, restore the original file and restart ssh service </p><div class="codebox"><pre><code>sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config-2fa</code></pre></div><div class="codebox"><pre><code>sudo cp /etc/ssh/sshd_config~ /etc/ssh/sshd_config</code></pre></div><div class="codebox"><pre><code>sudo service ssh restart</code></pre></div><p># This way you can switch back and fourt if you need.</p><p># Finally lets create a passwordless key based authentication for SSH from your workstation(s) as plan B.</p><h5>Password-less key based authentication</h5><p>## On client/workstation side ##<br /># Create a new ssh key with Ed25519</p><div class="codebox"><pre><code>ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519 -C &quot;$USER@$HOSTNAME-$(date +%F)&quot;</code></pre></div><p>#Enter the same password that you have for your user, this will keep things easier</p><p># Copy the new ssh key to server</p><div class="codebox"><pre><code>ssh-copy-id -i ~/.ssh/id_ed25519.pub $USER@&lt;SERVER_NAME/IP&gt;</code></pre></div><p># This copied the user key to the file ~/.ssh/authorized_keys on server, in other words, to remove password-less authentication for this server then on the same server:</p><div class="codebox"><pre><code>rm ~/.ssh/authorized_keys</code></pre></div><p># Now you can connect like &quot;ssh &lt;SERVER_NAME/IP&gt;&quot; and wont be asked to enter a password or even a 2FA, <br /># this simply to avoid having to use the Authenticator app every time from your own trusted workstations.<br /># or in worst case scenario, if for any reason you can&#039;t use your phone or usb key at the moment.<br /># You can have as many client/workstation keys as you want, just make sure you keep your username as constant.</p><p>Tested with Devuan 6 (Excalibur) but it should work the same with previous versions.</p>]]></description>
			<author><![CDATA[dummy@example.com (joser)]]></author>
			<pubDate>Tue, 09 Dec 2025 00:13:34 +0000</pubDate>
			<guid>https://dev1galaxy.org/viewtopic.php?id=7657&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[[How To] Devuan 6 Excalibur – Install and setup a minimal X.Org Server]]></title>
			<link>https://dev1galaxy.org/viewtopic.php?id=7650&amp;action=new</link>
			<description><![CDATA[<p>This How To is based on this tutorial:<br /><a href="https://web.archive.org/web/20230402114059/https://www.devuan.org/os/documentation/dev1fanboy/en/minimal-xorg-install.html" rel="nofollow">https://web.archive.org/web/20230402114 … stall.html</a><br />But it is not the same, because the original does not work anymore.</p><p><strong>Note:</strong><br />This setup will give you a working xserver without the need for a displaymanager or a desktop enviroment.</p><p><strong>1. List all available video drivers in the repos with a short description</strong></p><div class="codebox"><pre><code>apt-cache search xserver-xorg-video-.* | pager</code></pre></div><p><strong>2. Install the one(s) you need</strong></p><div class="codebox"><pre><code>apt-get install xserver-xorg-video-Your_GPU_Vendor_Here</code></pre></div><p><strong>3. Install the minimum packages to get a working and useable xserver</strong></p><div class="codebox"><pre><code>apt-get install x11-xserver-utils xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xinit xorg xserver-xorg-input-kbd xserver-xorg-input-libinput xserver-xorg-input-mouse</code></pre></div><p><strong>4. Install a window manager (I use evilwm, but you can use what ever you want)</strong></p><div class="codebox"><pre><code>apt-get install evilwm</code></pre></div><p><strong>5. Install a terminal emulator (I use rxvt-unicode, but you can use what ever you want)</strong></p><div class="codebox"><pre><code>apt-get install rxvt-unicode</code></pre></div><p><strong>6. Install a hotkey utility to start programs with keybindings</strong><br />I use keylaunch since ages.<br />Sadly the developer has dropped it, but the deb-files for it are still available here:<br /><a href="https://packages.debian.org/bullseye/keylaunch" rel="nofollow">https://packages.debian.org/bullseye/keylaunch</a><br />It still works on Devuan 5 Daedalus and on Devuan 6 Excalibur.<br />It is very small, it only dependencies are <strong>libc6</strong> and <strong>libx11-6</strong> (so packages every system has normally) and has only one configuration file in text format, wich is pretty easy to understand and to edit.</p><p>Download the deb-file you need and install it with:</p><div class="codebox"><pre><code>dpkg --install keylaunch_1.3.9+b2_amd64.deb</code></pre></div><p><strong>7. Create the configuration file for keylaunch in the home directory of the user who will run the xsession</strong></p><div class="codebox"><pre><code>touch ~.keylaunchrc</code></pre></div><p><strong>8. Edit the configuration file for keylaunch</strong><br />Put this at the top of the file content, it explains the whole file:</p><div class="codebox"><pre><code># Format:
# key=...KeyName:Command
#
# ... No modifier
# *.. Shift
# .*. Ctrl
# ..* Alt</code></pre></div><p>And then some actual binding, here for example to start the rxvt-unicode terminal emulator:</p><div class="codebox"><pre><code>key=*.*t:rxvt-unicode</code></pre></div><p>This means, when you in a running xsession, you can press and hold down <strong>Shift</strong> and <strong>Alt</strong> and then press <strong>t</strong> and this will spawn a terminal.<br />Of course you can use the hotkey combination you like the most, this is just an example.</p><p><strong>9. Create a xinit file in the home directory of the user who will run the xsession</strong></p><div class="codebox"><pre><code>touch ~/.xinitrc</code></pre></div><p><strong>10. Put the starting command for the windowmanager in that file, so that the windowmanager will start right after the xsession has started</strong></p><div class="codebox"><pre><code>evilwm</code></pre></div><p>This is an example, if you use a different windowmanager than evilwm, use the start command of that instead.</p><p><strong>11. Reboot your computer</strong></p><div class="codebox"><pre><code>reboot</code></pre></div><p>You need to do this for the drivers, so you could have done it before, but to do it after setting all things up is easier.</p><p><strong>12. Start the xsession with the prefered user (so the user who has the .xinitrc and .keylaunchrc files in the home directory).</strong></p><div class="codebox"><pre><code>startx</code></pre></div><p><strong>13. End the xsession by killing the windowmanager</strong></p><div class="codebox"><pre><code>pidof evilwm | xargs kill</code></pre></div>]]></description>
			<author><![CDATA[dummy@example.com (hacksenwerk)]]></author>
			<pubDate>Sun, 07 Dec 2025 18:25:50 +0000</pubDate>
			<guid>https://dev1galaxy.org/viewtopic.php?id=7650&amp;action=new</guid>
		</item>
	</channel>
</rss>
