<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="http://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>http://dev1galaxy.org/index.php</link>
		<description><![CDATA[The most recent topics at Dev1 Galaxy Forum.]]></description>
		<lastBuildDate>Wed, 10 Jun 2026 09:16:54 +0000</lastBuildDate>
		<generator>FluxBB</generator>
		<item>
			<title><![CDATA[Exploring Help systems semantics]]></title>
			<link>http://dev1galaxy.org/viewtopic.php?id=8031&amp;action=new</link>
			<description><![CDATA[<p>Lets see what offline help devuan excalibur live cd offers: </p><p>It has on the desktop in prominent place :</p><p>* Release notes<br />* README_desktop-live.txt<br />* REAME.txt</p><p>Except from basic info they basically link to online help.</p><p>Devuan and Artix livecd that i tested they resort to plain text file as an entry help system. Interesting.</p>]]></description>
			<author><![CDATA[dummy@example.com (chomwitt)]]></author>
			<pubDate>Wed, 10 Jun 2026 09:16:54 +0000</pubDate>
			<guid>http://dev1galaxy.org/viewtopic.php?id=8031&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[Install Docker on Devuan]]></title>
			<link>http://dev1galaxy.org/viewtopic.php?id=6576&amp;action=new</link>
			<description><![CDATA[<p>I was recommended to use the official instructions for Debian, but substitute the corresponding Debian codename here<br />```<br />sudo tee /etc/apt/sources.list.d/docker.sources &lt;&lt;EOF<br />Types: deb<br />URIs: <a href="https://download.docker.com/linux/debian" rel="nofollow">https://download.docker.com/linux/debian</a><br />Suites: $(. /etc/os-release &amp;&amp; echo &quot;$VERSION_CODENAME&quot;)<br />Components: stable<br />Architectures: $(dpkg --print-architecture)<br />Signed-By: /etc/apt/keyrings/docker.asc<br />EOF<br />```<br />for `Suites`. Curiously they suggested using `Suites: trixie` even for Devuan freia. Works so far</p>]]></description>
			<author><![CDATA[dummy@example.com (safari)]]></author>
			<pubDate>Tue, 02 Jun 2026 16:28:31 +0000</pubDate>
			<guid>http://dev1galaxy.org/viewtopic.php?id=6576&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[An unofficial Guide to runit on Debian-derived distros]]></title>
			<link>http://dev1galaxy.org/viewtopic.php?id=7802&amp;action=new</link>
			<description><![CDATA[<p>Hi,</p><p>just to drop a note that, in recent versions or runit (currently in testing/unstable) I changed few bits in runit-heper and trigger_sv so that,<br />in order to disable a services you can just</p><div class="codebox"><pre><code>touch /etc/service/.servicename</code></pre></div><p>So you no longer have to create a .symlink, just touch a file with the service name with a leading dot; I hope that it makes easier to preseed and do custom setups</p><p>Best,<br />Lorenzo</p>]]></description>
			<author><![CDATA[dummy@example.com (Lorenzo)]]></author>
			<pubDate>Mon, 01 Jun 2026 17:29:31 +0000</pubDate>
			<guid>http://dev1galaxy.org/viewtopic.php?id=7802&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[[HowTo] Create a Service Script for sysvinit]]></title>
			<link>http://dev1galaxy.org/viewtopic.php?id=8010&amp;action=new</link>
			<description><![CDATA[<p>You could also refer to the &quot;man page&quot; <span class="bbc">init-d-script</span>.</p>]]></description>
			<author><![CDATA[dummy@example.com (ralph.ronnquist)]]></author>
			<pubDate>Sat, 30 May 2026 04:26:32 +0000</pubDate>
			<guid>http://dev1galaxy.org/viewtopic.php?id=8010&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[[HowTo] Portmaster v2 on Devuan 6 Excalibur Desktop]]></title>
			<link>http://dev1galaxy.org/viewtopic.php?id=8001&amp;action=new</link>
			<description><![CDATA[<p>How to update portmaster v2 correctly on Devuan 6 Excalibur Desktop.</p><p>1. Export settings<br />Global Settings(the gear/cog icon)&gt; Export Settings.<br />click many boxes.<br />and click the Save button. It&#039;ll display the confirmation window. And again click the Save button. It made the export.yaml file on your Downloads directory. This is your portmaster settings.<br />2. Manual uninstallation portmaster<br />3. Restart/Reboot your computer<br />4. Manual re-installation portmaster<br />5. Restart/Reboot your computer<br />6. Import Settings. Choose File. choose the export.yaml file.</p><p><em>Caution: Don&#039;t update portmaster via portmaster itself.</em><br />If you do this, then there will be no UI startup.<br />When you encounter this issue. The bottom might help you. However, your portmaster settings will be gone.<br />Manual uninstallation portmaster.<br />Restart/Reboot your computer.<br />Manual re-installation portmaster.<br />Restart/Reboot your computer.</p>]]></description>
			<author><![CDATA[dummy@example.com (matthew)]]></author>
			<pubDate>Wed, 27 May 2026 18:15:34 +0000</pubDate>
			<guid>http://dev1galaxy.org/viewtopic.php?id=8001&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[HOW TO: Install XLibre on Devuan]]></title>
			<link>http://dev1galaxy.org/viewtopic.php?id=7388&amp;action=new</link>
			<description><![CDATA[<p>FWIW here&#039;s my tangential observation(s).&#160; I am using XLibre but on Debian Test.&#160; I run:</p><p> OS ▸&#160; Debian GNU/Linux Trixie x86_64<br />&#160; &#160; &#160; &#160;BD++++D+D+::::::+D&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;Kernel ▸&#160; Linux 6.19.14-2-liquorix-amd64<br />&#160; &#160; &#160; D+-::::=D+::::::::+BBDD+&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; Uptime ▸&#160; 1 hour, 52 mins<br />&#160; &#160; &#160;D=::::::=B=-::::::=BB++=+D&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;Processes ▸&#160; 327<br />&#160; &#160; &#160;D-:::::=BDD=-::-=+B=-::::=D&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; Packages ▸&#160; 2217<br />&#160; &#160; &#160;B+--==+++===++BDD+:::::::-D&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; Window Manager ▸&#160; dwm (XLibre)<br />&#160; &#160;DB+++==:::::::::-+D-:::::::=D&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; Shell ▸&#160; zsh 5.9<br />&#160; D=:::::::::::::::::++:::::-+D&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;Terminal ▸&#160; xterm 409<br /> D+::::::::::::::::::+D++==+BD+&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;Terminal Font ▸&#160; JetBrains Mono Nerd Font:style=Regular (11pt)<br />&#160; D=:::::::::::::::::+BD+=--:-+D&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; Terminal Theme ▸&#160; ● ● ● ● ● ● ● ●<br />&#160; &#160;B+=-::::::::::::::B+-::::::=D&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; Brightness ▸&#160; 100% [Built-in]<br />&#160; &#160; DBB++-::::::::::-D:::::::-+D&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; CPU ▸&#160; 12 x AMD Ryzen 7 7445HS<br />&#160; &#160; &#160; &#160; DB+:::::::::+D=-:::-=+D&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;GPU ▸&#160; GeForce RTX 4050 Max-Q / Mobile<br />&#160; &#160; &#160; &#160; &#160; D=:::::::-D +BDBBD+&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;GPU ▸&#160; AMD Radeon 740M Graphics<br />&#160; &#160; &#160; &#160; &#160; &#160;B+--::-=D&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; RAM ▸&#160; 2.39 GiB / 14.88 GiB (16%)<br />&#160; &#160; &#160; &#160; &#160; &#160; +BDBDD+&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;Swap ▸&#160; 0 B / 7.45 GiB (0%)<br />&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; Disk ▸&#160; 1.09 TiB / 1.78 TiB (61%) - ext4</p><p>To answer a few questions I see in this thread.&#160; For me XLibre performance is about 6-7% better than with non-XLibre.&#160; Like many here, I am not a fan of Wayland- I ran it for a year to give it a test... and if I only ran a single wm without conky, I could make it work.&#160; But I run with dwm,i3wm,openbox and choose not survive with a crippled conky (maybe its fixed these days; I don&#039;t know).&#160; &#160;Should I use systemd... just to answer that item, I need my stupid VRAM (nVidia) to work because I run a local AI on my machine- for lots of reasons that would probably get this note thrown off here.&#160; Suffice it to say, nVidia is necessary for resilience and grandsons- not optional and nVidia is also blindingly painful, but I have it working. Yay.</p><p>In general, the politics alluded to here re: XLibre are a pretty obvious issue for some folks.&#160; I have not personally encountered any problems.&#160; So, it&#039;s alright so far.&#160; For any who would like to see my stupid-simple XLibre install it&#039;s freely available here:&#160; </p><p><a href="https://codeberg.org/eirenicon/dwm-XLibre" rel="nofollow">https://codeberg.org/eirenicon/dwm-XLibre</a></p><p>btw. it is worth every penny you paid for it, as well. <img src="http://dev1galaxy.org/img/smilies/wink.png" width="15" height="15" alt="wink" /></p>]]></description>
			<author><![CDATA[dummy@example.com (manyroads)]]></author>
			<pubDate>Mon, 04 May 2026 13:06:40 +0000</pubDate>
			<guid>http://dev1galaxy.org/viewtopic.php?id=7388&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[[HowTo] Protect from SHH brute force attacks with fail2ban]]></title>
			<link>http://dev1galaxy.org/viewtopic.php?id=7933&amp;action=new</link>
			<description><![CDATA[<p>An SSH brute force attack is a hacking technique where attackers use automated tools to systematically try thousands of username and password combinations to gain unauthorized access to a remote server via the Secure Shell (SSH) protocol.</p><p>To be fair this is not a definitive protection but another countermeasure to reduce drastically the risks from such attacks when using public IPs.</p><p># As a complementary measure you should NOT allow ssh root login using password but using ssh key in worst case escenario, to do that change the settings for sshd:</p><div class="codebox"><pre><code>sudo nano /etc/ssh/sshd_config</code></pre></div><p># Uncomment the #PermitRootLogin line like:<br /><span class="bbc">PermitRootLogin prohibit-password</span></p><p># Install packages:</p><div class="codebox"><pre><code>sudo apt install -y fail2ban lnav python3-pyinotify</code></pre></div><p># Verify connection attemps</p><div class="codebox"><pre><code>sudo lnav /var/log/auth.log</code></pre></div><p># You will see very often lines like:<br /><span class="bbc">&lt;date&gt; - &lt;time&gt; &lt;hostname&gt; sshd[pid]: Failed password for root from xxx.xxx.xxx.xxx port xxxx ssh2</span> &lt;--- Brute force attack</p><p># and also when you connect you will see a line like this:<br /><span class="bbc">&lt;date&gt; - &lt;time&gt; &lt;hostname&gt; sshd[pid]: Accepted publikey for &lt;youruser&gt; from &lt;your.isp.public.ip&gt; port xxxxx ssh2: EDxxxx &lt;--- If you are using ssh keys instead of password this is you.</span><br /><span class="bbc">&lt;date&gt; - &lt;time&gt; &lt;hostname&gt; sshd-session[pid]: Accepted password for &lt;youruser&gt; from &lt;your.isp.public.ip&gt; port 39284 ssh2 &lt;--- Or if you still using password authentication.</span><br /># We will whitelist this IP &lt;your.isp.public.ip&gt; just in case since we will use a very strict ban criteria/time.</p><p># Press q to exit</p><p># Create Local Configuration to preserve settings during updates.</p><div class="codebox"><pre><code>sudo nano /etc/fail2ban/jail.local</code></pre></div><p># Configure SSH Protection, we will use 3 attemps to block earlier than 5 attemps and for 3 hours but later you can increase the bantime if you notice the same IP addresses repeating again and again:<br /><span class="bbc">[DEFAULT]<br /># Whitelist your own IP address (space-separated)<br />ignoreip = 127.0.0.1/8 ::1 &lt;your.isp.public.ip&gt;</span></p><p><span class="bbc">[sshd]<br />backend = auto<br />enabled = true<br />maxretry = 3<br />bantime = 3h<br />findtime = 10m</span>&#160; &#160;</p><p># Restart fail2ban service</p><div class="codebox"><pre><code>sudo service fail2ban restart</code></pre></div><p># Verify ssh jail status</p><div class="codebox"><pre><code>sudo fail2ban-client status sshd</code></pre></div><p>&#160; </p><p># You will see something like:</p><div class="codebox"><pre><code>Status for the jail: sshd
|- Filter
|  |- Currently failed:	1
|  |- Total failed:	5
|  `- File list:	/var/log/auth.log
`- Actions
   |- Currently banned:	6
   |- Total banned:	6
   `- Banned IP list:	2.57.122.189 2.57.122.192 45.148.10.147 45.148.10.151 45.148.10.157 92.118.39.236</code></pre></div><p>&#160; &#160;<br /># Now if you verify connection attemps again<br /><span class="bbc">sudo lnav /var/log/auth.log</span></p><p>You will notice the attemps wont repeat from the same IP since the moment fail2ban was restarted, keep it running and eventually they will realize is not worthy to keep trying or they will run out of public IPS or you can also increase the time if the same IP address keep showing up.</p><p>To add an extra layer of protection you can also enable 2FA with oathtool to make ssh ask for 6 digits code before you can enter any password, that way the attack never even begins since the client gets disconnected and banned when doens&#039;t provide a valid 6 digits code to begin with the login attemp, link to guide below.</p><p><a href="https://dev1galaxy.org/viewtopic.php?id=7657" rel="nofollow">[HowTo] 2FA TOTPs for SSH without google-authenticator.</a></p><p>Edited on April-29-2026, steps above tested on Devuan 5, but for Devuan 6 these 2 changes below are required:<br />Added package to install: python3-pyinotify<br />Added: backend = auto</p>]]></description>
			<author><![CDATA[dummy@example.com (joser)]]></author>
			<pubDate>Sat, 25 Apr 2026 02:06:37 +0000</pubDate>
			<guid>http://dev1galaxy.org/viewtopic.php?id=7933&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[Installation and Setup: Hyprshot, a screenshot tool for Hyprland]]></title>
			<link>http://dev1galaxy.org/viewtopic.php?id=7926&amp;action=new</link>
			<description><![CDATA[<p><strong>Hyprshot</strong> is a specialized screenshot utility designed specifically for the Hyprland Wayland compositor. It functions as a shell script that serves as a wrapper around core tools like <span class="bbc">grim</span> (for capturing), <span class="bbc">slurp</span> (for region selection), and <span class="bbc">wl-clipboard</span> (for copying to clipboard).</p><h5>Navigate to the upstream repository</h5><p>Navigate to the Hyprshot <a href="https://github.com/Gustash/Hyprshot#installation" rel="nofollow">GitHub repository</a> for the source files and installation instructions. This guide is based on that repository, customized for Devuan.</p><h5>Install dependencies</h5><p>Install the dependencies mentioned in the Hyprshot repository, alongside the <span class="bbc">dunst</span> notification daemon.</p><div class="quotebox"><blockquote><div><p><strong>ℹ️IMPORTANT</strong><br />On Devuan, <span class="bbc">libnotify-bin</span> by itself is not enough as a notification daemon for Hyprshot to operate.</p></div></blockquote></div><div class="codebox"><pre><code>$ su -
# apt install jq grim slurp wl-clipboard libnotify-bin dunst
# exit</code></pre></div><h5>Creating the optimal directory for manually installed user scripts</h5><p>For a manual installation (downloading the script directly), place it in a directory that is in your user&#039;s <span class="bbc">$PATH</span>. The most common and recommended location is <span class="bbc">~/.local/bin</span>.</p><div class="codebox"><pre><code>$ mkdir -p ~/.local/bin</code></pre></div><p>If this directory does not exist or is not in your PATH, you will need to create it and add it to your shell&#039;s configuration file (e.g., <span class="bbc">~/.bashrc</span> or <span class="bbc">~/.zshrc</span>).</p><div class="quotebox"><blockquote><div><p><strong>💡TIP</strong><br />Devuan, by default, should have the <span class="bbc">~/.local/bin</span> directory added by default via <span class="bbc">/etc/bash.bashrc</span>.</p></div></blockquote></div><h5>Clone Hyprshot source code into created directory</h5><div class="codebox"><pre><code>$ git clone https://github.com/Gustash/hyprshot.git ~/.local/bin/Hyprshot</code></pre></div><h5>Symbolically make the script executable</h5><p>Create a symbolic link to make the script executable from anywhere.</p><div class="codebox"><pre><code>$ cd ~/.local/bin
$ ln -s $(pwd)/Hyprshot/hyprshot $HOME/.local/bin
$ chmod +x Hyprshot/hyprshot</code></pre></div><h5>Restarting your system and testing the command</h5><p>After completing the installation, restart your system to ensure all changes, environment variables, and the PATH are properly loaded.</p><div class="codebox"><pre><code>$ su -
# reboot</code></pre></div><p>To test Hyprshot, log in, open a terminal and run a command to capture a specific element, such as:</p><div class="codebox"><pre><code>$ hyprshot -m window</code></pre></div><p>This command will change your cursor, allowing you to click on any window to take a screenshot. If successful, the screenshot will be saved to your <span class="bbc">XDG_PICTURES_DIR</span> (typically <span class="bbc">~/Pictures</span>) and copied to the clipboard. You can test other modes like <span class="bbc">-m region</span> for a custom area or <span class="bbc">-m output</span> for a full monitor.</p>]]></description>
			<author><![CDATA[dummy@example.com (wolfchar)]]></author>
			<pubDate>Thu, 23 Apr 2026 04:36:52 +0000</pubDate>
			<guid>http://dev1galaxy.org/viewtopic.php?id=7926&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[Installation and Setup: Steam on Devuan for Hyprland]]></title>
			<link>http://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>http://dev1galaxy.org/viewtopic.php?id=7904&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[[HowTo] Install Gitea on Devuan 5]]></title>
			<link>http://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>http://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>http://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>http://dev1galaxy.org/viewtopic.php?id=7889&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[How to: Devuan 5 Daedalus an pipewire]]></title>
			<link>http://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>http://dev1galaxy.org/viewtopic.php?id=5867&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[[HowTo] Use slimlock with xfce]]></title>
			<link>http://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>http://dev1galaxy.org/viewtopic.php?id=7820&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[[HowTo] Excalibur + MATE/Xfce: Remove the suspend/hibernate buttons]]></title>
			<link>http://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>http://dev1galaxy.org/viewtopic.php?id=7780&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[[SOLVED] struggling starting auto-cpufreq --daemon]]></title>
			<link>http://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>http://dev1galaxy.org/viewtopic.php?id=7771&amp;action=new</guid>
		</item>
	</channel>
</rss>
