<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Hishantik Sarkar</title>
    <description>The latest articles on Forem by Hishantik Sarkar (@hishantik).</description>
    <link>https://forem.com/hishantik</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F928401%2F5b43aaae-ed2b-4db0-9b1a-112f09a36af0.jpg</url>
      <title>Forem: Hishantik Sarkar</title>
      <link>https://forem.com/hishantik</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/hishantik"/>
    <language>en</language>
    <item>
      <title>A Complete Guide to Networking on Linux Systems for File and Data Sharing</title>
      <dc:creator>Hishantik Sarkar</dc:creator>
      <pubDate>Thu, 07 May 2026 07:46:58 +0000</pubDate>
      <link>https://forem.com/hishantik/a-complete-guide-to-networking-on-linux-systems-for-file-and-data-sharing-126f</link>
      <guid>https://forem.com/hishantik/a-complete-guide-to-networking-on-linux-systems-for-file-and-data-sharing-126f</guid>
      <description>&lt;p&gt;Network file sharing between Linux systems forms the backbone of efficient data management in modern IT environments. Whether you are managing a home lab, administering enterprise servers, or simply transferring files between personal machines, understanding how to configure file sharing across Linux distributions like Ubuntu and Arch Linux is an essential skill. This guide walks you through the most effective methods for establishing secure, reliable file sharing between Linux systems, complete with step-by-step instructions and command-line examples.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding Linux File Sharing Technologies
&lt;/h2&gt;

&lt;p&gt;Before diving into configuration, it is important to understand the primary technologies available for &lt;em&gt;Linux-to-Linux&lt;/em&gt; file sharing. Each approach offers distinct advantages depending on your specific use case, security requirements, and performance needs.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Network File System&lt;/strong&gt;, or &lt;strong&gt;NFS&lt;/strong&gt;, represents the most native and efficient solution for Linux-to-Linux sharing. Developed originally by Sun Microsystems, NFS has been a staple of Unix and Linux networking for decades. It operates on a client-server model where the server exports directories that clients mount as if they were local filesystems. NFS performs exceptionally well within trusted networks due to its lightweight protocol and minimal overhead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Samba&lt;/strong&gt;, despite its origins as a compatibility layer for Windows file sharing, also serves Linux-to-Linux environments effectively. When you need to share files across heterogeneous environments or maintain compatibility with Windows systems that might join your network later, Samba provides a robust solution. Modern Samba configurations offer strong security features and excellent performance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Secure Shell-based&lt;/strong&gt; solutions, including &lt;strong&gt;SCP&lt;/strong&gt; and &lt;strong&gt;SFTP&lt;/strong&gt;, provide encrypted file transfer capabilities without requiring complex server configuration. These methods prove ideal for one-time transfers, automated scripts, or situations where mounting remote filesystems seems excessive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting Up NFS File Sharing Between Linux Systems
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;NFS&lt;/strong&gt; offers the most straightforward path to seamless file sharing between Linux machines. The following sections detail how to configure both &lt;strong&gt;&lt;em&gt;Ubuntu&lt;/em&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;em&gt;Arch Linux&lt;/em&gt;&lt;/strong&gt; systems as &lt;strong&gt;NFS&lt;/strong&gt; servers and clients.&lt;/p&gt;

&lt;h3&gt;
  
  
  Configuring the NFS Server
&lt;/h3&gt;

&lt;p&gt;Begin by installing the necessary &lt;strong&gt;NFS&lt;/strong&gt; server software on the machine that will host the shared directories. On Ubuntu, execute the following commands with root privileges to install the NFS kernel server and related utilities. The installation process automatically creates the necessary system groups and user mappings that NFS requires for operation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;nfs-kernel-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On &lt;strong&gt;&lt;em&gt;Arch Linux&lt;/em&gt;&lt;/strong&gt;, the process requires installing the &lt;em&gt;nfs-utils&lt;/em&gt; package, which provides both client and server functionality. Arch follows a minimal installation philosophy, so you may need to enable and &lt;code&gt;start theRPC bind service&lt;/code&gt; before configuring &lt;strong&gt;NFS&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-Syu&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-S&lt;/span&gt; nfs-utils
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; &lt;span class="nt"&gt;--now&lt;/span&gt; rpcbind.service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With the software installed, you must now define which directories the server will share and which clients may access them. This configuration lives in the &lt;code&gt;/etc/exports file&lt;/code&gt;, where each line specifies a directory path, client access parameters, and export options. Consider a configuration that shares the &lt;code&gt;/data directory&lt;/code&gt; with two specific machines on your local network, configuring appropriate permissions and squash settings to prevent privilege escalation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /data/shared
&lt;span class="nb"&gt;sudo chown &lt;/span&gt;nobody:nogroup /data/shared
&lt;span class="nb"&gt;sudo chmod &lt;/span&gt;755 /data/shared
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Edit the exports file using your preferred text editor, adding a line that specifies the shared directory and client machines. The following example grants read-write access to two specific IP addresses while using the &lt;code&gt;rw&lt;/code&gt; and &lt;code&gt;sync&lt;/code&gt; options to ensure data integrity.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/exports
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add the following line to &lt;code&gt;/etc/exports&lt;/code&gt;, adjusting the IP addresses to match your network configuration:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;/data/shared 192.168.1.10(rw,sync,no_subtree_check) 192.168.1.11(rw,sync,no_subtree_check)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After saving the configuration, export the shared directories and restart the NFS server to apply the changes. The exportfs command with the -a flag processes all entries in &lt;code&gt;/etc/exports&lt;/code&gt;, while the &lt;code&gt;-r&lt;/code&gt; option &lt;strong&gt;&lt;em&gt;resynchronizes&lt;/em&gt;&lt;/strong&gt; the current export table.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;exportfs &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart nfs-kernel-server  &lt;span class="c"&gt;# Ubuntu&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart nfs-server.service  &lt;span class="c"&gt;# Arch Linux&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Configuring the NFS Client
&lt;/h3&gt;

&lt;p&gt;On the machine that will access the shared directories, install the NFS client utilities and create a mount point directory. The client side requires far less configuration than the server, as most settings are determined by the server's export options.&lt;/p&gt;

&lt;h4&gt;
  
  
  Ubuntu
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;nfs-common
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Arch Linux
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-S&lt;/span&gt; nfs-utils
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create the mount point directory and mount the remote filesystem. The mount command connects to the &lt;strong&gt;NFS&lt;/strong&gt; server and makes the remote directory accessible through the local mount point. For permanent mounting, add an entry to the &lt;code&gt;/etc/fstab&lt;/code&gt; file, which instructs the system to establish the connection automatically during boot.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /mnt/nfs/shared
&lt;span class="nb"&gt;sudo &lt;/span&gt;mount 192.168.1.100:/data/shared /mnt/nfs/shared
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;For permanent mounting, add this line to &lt;code&gt;/etc/fstab&lt;/code&gt;:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;192.168.1.100:/data/shared /mnt/nfs/shared nfs defaults,timeo=900,retrans=5,_netdev 0 0&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Implementing Samba for Linux-to-Linux File Sharing
&lt;/h2&gt;

&lt;p&gt;While &lt;strong&gt;NFS&lt;/strong&gt; excels in pure Linux environments, Samba provides additional flexibility and compatibility benefits. Modern Samba versions offer excellent performance and robust security features that make them suitable for Linux-only networks as well.&lt;/p&gt;

&lt;h3&gt;
  
  
  Installing and Configuring Samba on Ubuntu
&lt;/h3&gt;

&lt;p&gt;Begin by installing the &lt;strong&gt;Samba&lt;/strong&gt; package along with its associated utilities. The installation process on &lt;strong&gt;&lt;em&gt;Ubuntu&lt;/em&gt;&lt;/strong&gt; automatically configures basic services and creates the necessary system users, though significant configuration remains necessary.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;samba samba-common-bin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a dedicated directory for sharing and set appropriate ownership permissions. It is good practice to create a specific system user for Samba access, separating Samba authentication from regular system login credentials.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /samba/shared
&lt;span class="nb"&gt;sudo &lt;/span&gt;groupadd sambashare
&lt;span class="nb"&gt;sudo &lt;/span&gt;useradd &lt;span class="nt"&gt;-s&lt;/span&gt; /s/bin/false &lt;span class="nt"&gt;-G&lt;/span&gt; sambashare sambauser
&lt;span class="nb"&gt;sudo chown&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; sambauser:sambashare /samba/shared
&lt;span class="nb"&gt;sudo chmod &lt;/span&gt;0770 /samba/shared
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configure Samba by editing the &lt;code&gt;/etc/samba/smb.conf&lt;/code&gt; file. This configuration file uses a simple &lt;strong&gt;&lt;em&gt;ini-style&lt;/em&gt;&lt;/strong&gt; format where square brackets define share names and the remaining lines specify parameters for each share. The following configuration creates a share named shared with valid user access and appropriate permission settings.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/samba/smb.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Add the following configuration section to the end of the file:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;[shared]&lt;br&gt;
    comment = Shared Directory&lt;br&gt;
    path = /samba/shared&lt;br&gt;
    read only = no&lt;br&gt;
    browsable = yes&lt;br&gt;
    valid users = sambauser&lt;br&gt;
    create mask = 0660&lt;br&gt;
    directory mask = 0770&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Set a password for the Samba user, which must exist as a system user but uses a separate password database for Samba authentication. This dual-password system provides an additional layer of security by preventing regular system login through Samba access.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;smbpasswd &lt;span class="nt"&gt;-a&lt;/span&gt; sambauser
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart the &lt;strong&gt;Samba&lt;/strong&gt; services to load the new configuration. Ubuntu uses the &lt;strong&gt;smbd&lt;/strong&gt; and &lt;strong&gt;nmbd&lt;/strong&gt; daemons for &lt;strong&gt;CIFS/SMB&lt;/strong&gt; functionality, with nmbd handling NetBIOS name resolution.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart smbd nmbd
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;smbd nmbd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Installing and Configuring Samba on Arch Linux
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;&lt;em&gt;Arch Linux&lt;/em&gt;&lt;/strong&gt; installation follows a similar pattern, though package management and service handling differ slightly. Arch typically requires more manual configuration but offers greater flexibility.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-Syu&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-S&lt;/span&gt; samba
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create the required directories and user accounts using the same principles as the Ubuntu configuration. Arch Linux does not enable services by default, so explicit enablement steps are necessary.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /samba/shared
&lt;span class="nb"&gt;sudo &lt;/span&gt;groupadd sambashare
&lt;span class="nb"&gt;sudo &lt;/span&gt;useradd &lt;span class="nt"&gt;-s&lt;/span&gt; /s/bin/false &lt;span class="nt"&gt;-G&lt;/span&gt; sambashare sambauser
&lt;span class="nb"&gt;sudo chown&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; sambauser:sambashare /samba/shared
&lt;span class="nb"&gt;sudo chmod &lt;/span&gt;0770 /samba/shared
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configure &lt;strong&gt;Samba&lt;/strong&gt; identically to the Ubuntu setup by editing &lt;code&gt;/etc/samba/smb.conf&lt;/code&gt;. The configuration file format remains consistent across distributions. Create a basic configuration file if the default one does not suit your needs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/samba/smb.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add the same share configuration section described in the Ubuntu instructions. Then, set the Samba password and enable the required services.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;smbpasswd &lt;span class="nt"&gt;-a&lt;/span&gt; sambauser
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; &lt;span class="nt"&gt;--now&lt;/span&gt; smbd nmbd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Accessing Samba Shares from Linux Clients
&lt;/h2&gt;

&lt;p&gt;From any Linux machine on the network, you can access Samba shares using the smbclient utility or by mounting the share directly. Installing cifs-utils enables direct mounting behavior similar to NFS mounts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Install client utilities
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;cifs-utils  &lt;span class="c"&gt;#### Ubuntu&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-S&lt;/span&gt; cifs-utils    &lt;span class="c"&gt;#### Arch Linux&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Create mount point and mount the share
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /mnt/samba
&lt;span class="nb"&gt;sudo &lt;/span&gt;mount &lt;span class="nt"&gt;-t&lt;/span&gt; cifs //192.168.1.100/shared /mnt/samba &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="nv"&gt;user&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;sambauser,password&lt;span class="o"&gt;=&lt;/span&gt;your_password
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Securing Your Linux File Sharing Environment
&lt;/h2&gt;

&lt;p&gt;Security must remain paramount when configuring network file sharing. Both &lt;strong&gt;NFS&lt;/strong&gt; and &lt;strong&gt;Samba&lt;/strong&gt; offer various security mechanisms that you should understand and implement appropriately.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;NFS&lt;/strong&gt;, the &lt;code&gt;/etc/exports&lt;/code&gt; file controls client access at the network level. Never export directories to the entire internet or untrusted networks. The &lt;code&gt;rw&lt;/code&gt; and &lt;code&gt;ro&lt;/code&gt; options control read-write access, while root_squash and all_squash options map privileged user requests to unprivileged accounts, preventing clients from accessing files as root. Consider using specific IP addresses or network ranges rather than hostnames, which can be spoofed in certain circumstances.&lt;/p&gt;

&lt;h5&gt;
  
  
  Secure export example
&lt;/h5&gt;

&lt;blockquote&gt;
&lt;p&gt;/data/shared 192.168.1.0/24(rw,sync,root_squash,no_subtree_check)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Samba&lt;/strong&gt; security operates primarily through user authentication and share-level permissions. The valid users parameter restricts access to specific accounts, while read only and writable parameters control access mode. For enhanced security, consider implementing Samba with &lt;strong&gt;&lt;em&gt;TLS&lt;/em&gt;&lt;/strong&gt; encryption, which requires additional certificates but protects credentials and data from network sniffing.&lt;/p&gt;

&lt;p&gt;Both solutions require appropriate firewall configuration. Ubuntu uses &lt;strong&gt;&lt;em&gt;UFW&lt;/em&gt;&lt;/strong&gt; by default, while Arch often relies on &lt;strong&gt;iptables&lt;/strong&gt; or &lt;strong&gt;nftables&lt;/strong&gt;. Allow only the necessary ports for your configuration.&lt;/p&gt;

&lt;h4&gt;
  
  
  UFW for Ubuntu
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow from 192.168.1.0/24 to any port 2049  &lt;span class="c"&gt;# NFS&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow from 192.168.1.0/24 to any port 445   &lt;span class="c"&gt;# Samba&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Arch Linux using firewalld
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;firewall-cmd &lt;span class="nt"&gt;--permanent&lt;/span&gt; &lt;span class="nt"&gt;--add-service&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nfs
&lt;span class="nb"&gt;sudo &lt;/span&gt;firewall-cmd &lt;span class="nt"&gt;--permanent&lt;/span&gt; &lt;span class="nt"&gt;--add-service&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;samba
&lt;span class="nb"&gt;sudo &lt;/span&gt;firewall-cmd &lt;span class="nt"&gt;--reload&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Testing and Troubleshooting Your Configuration
&lt;/h2&gt;

&lt;p&gt;After configuration, thorough testing ensures everything functions correctly before relying on the setup for production use. Begin by verifying that the server correctly advertises its shares using the appropriate discovery commands.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;NFS&lt;/strong&gt;, use the &lt;strong&gt;&lt;em&gt;showmount utility&lt;/em&gt;&lt;/strong&gt; to query the server's exported directories. From the client machine, execute the following command against your NFS server's IP address to display available shares.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;showmount &lt;span class="nt"&gt;-e&lt;/span&gt; 192.168.1.100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For &lt;strong&gt;Samba&lt;/strong&gt;, the &lt;strong&gt;&lt;em&gt;smbclient utility&lt;/em&gt;&lt;/strong&gt; provides an interactive browsing capability that tests both connectivity and authentication. This command logs in to the specified share using the configured username, prompting for a password that should match your Samba password.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;smbclient &lt;span class="nt"&gt;-U&lt;/span&gt; sambauser //192.168.1.100/shared
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Common issues typically involve permission mismatches, firewall blocking, or service status problems. Verify that all required services are running using &lt;code&gt;systemctl status&lt;/code&gt; commands, and check logs in &lt;code&gt;/var/log/&lt;/code&gt; directories when authentication or mounting failures occur. Ensure that both server and client time settings are synchronized, as authentication failures sometimes result from time drift between machines.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Establishing file sharing between Linux systems need not be intimidating, regardless of whether you work with Ubuntu, Arch Linux, or a mixture of distributions. &lt;strong&gt;NFS&lt;/strong&gt; provides the most efficient solution for Linux-native environments, while Samba offers broader compatibility and familiar configuration patterns. Both technologies, when properly secured, provide robust foundations for networked file sharing that rival or exceed Windows file sharing capabilities.&lt;/p&gt;

&lt;p&gt;Begin with &lt;strong&gt;NFS&lt;/strong&gt; for pure Linux environments where simplicity and performance are priorities. Consider Samba when Windows compatibility might become necessary or when you prefer its authentication model. Implement firewall rules and appropriate export options to maintain security throughout your configuration. With the steps outlined in this guide, you now possess the knowledge to configure reliable, secure file sharing across your Linux infrastructure.&lt;/p&gt;

</description>
      <category>networking</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>security</category>
    </item>
    <item>
      <title>Setting Up Termux for Web Development: A Complete Guide</title>
      <dc:creator>Hishantik Sarkar</dc:creator>
      <pubDate>Tue, 11 Feb 2025 12:43:36 +0000</pubDate>
      <link>https://forem.com/hishantik/setting-up-termux-for-web-development-a-complete-guide-jal</link>
      <guid>https://forem.com/hishantik/setting-up-termux-for-web-development-a-complete-guide-jal</guid>
      <description>&lt;p&gt;Termux is a powerful terminal emulator for Android that allows you to&lt;br&gt;
run a Linux environment without root. With the right setup, you can&lt;br&gt;
turn Termux into a fully functional &lt;strong&gt;web development&lt;/strong&gt; environment with&lt;br&gt;
&lt;strong&gt;Oh My Zsh, Oh My Posh, Git, Neovim/LunarVim, and Node.js (Live Server).&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this guide, you’ll learn how to:&lt;/p&gt;

&lt;p&gt;✅ Install and configure Termux&lt;/p&gt;

&lt;p&gt;✅ Set up a powerful shell with Oh My Zsh and Oh My Posh&lt;/p&gt;

&lt;p&gt;✅ Install Git for version control&lt;/p&gt;

&lt;p&gt;✅ Configure Neovim/LunarVim for coding&lt;/p&gt;

&lt;p&gt;✅ Set up Node.js with a Live Server for web development&lt;/p&gt;


&lt;h2&gt;
  
  
  1. Installing Termux &amp;amp; Required Packages
&lt;/h2&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Step 1:&lt;/strong&gt; Install Termux
&lt;/h3&gt;

&lt;p&gt;Download and install Termux from F-Droid (recommended) or from GitHub (Termux GitHub).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ DO NOT install Termux from the Play Store as it’s outdated!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Step 2:&lt;/strong&gt; Update Termux and Install Basic Packages
&lt;/h3&gt;

&lt;p&gt;Open Termux and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pkg update &amp;amp;&amp;amp; pkg upgrade -y
pkg install termux-api x11-repo tur-repo
pkg install zsh git neovim nodejs python wget curl unzip -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Step 3:&lt;/strong&gt; Create a Symlink to an External SD Card for Easy Access
&lt;/h3&gt;

&lt;p&gt;If your device has an external SD card, you can create a symbolic link (symlink) to access it easily from your home directory.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;Step 1: Find the Name of Your External SD Card.&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The system assigns a unique name to your SD card, usually in the format /XXXX-XXXX (e.g., /3454-3377). To find the name of your SD card, open a terminal and type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;df
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output would be somewhat similar to this :&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Filesystem&lt;/th&gt;
&lt;th&gt;1K-blocks&lt;/th&gt;
&lt;th&gt;Used&lt;/th&gt;
&lt;th&gt;Available&lt;/th&gt;
&lt;th&gt;Use%&lt;/th&gt;
&lt;th&gt;Mounted on&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;/dev/root&lt;/td&gt;
&lt;td&gt;305248512&lt;/td&gt;
&lt;td&gt;12345678&lt;/td&gt;
&lt;td&gt;292902834&lt;/td&gt;
&lt;td&gt;5%&lt;/td&gt;
&lt;td&gt;/&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;devtmpfs&lt;/td&gt;
&lt;td&gt;4000000&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;4000000&lt;/td&gt;
&lt;td&gt;0%&lt;/td&gt;
&lt;td&gt;/dev&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;tmpfs&lt;/td&gt;
&lt;td&gt;4023456&lt;/td&gt;
&lt;td&gt;456&lt;/td&gt;
&lt;td&gt;4023000&lt;/td&gt;
&lt;td&gt;1%&lt;/td&gt;
&lt;td&gt;/dev/shm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;tmpfs&lt;/td&gt;
&lt;td&gt;4023456&lt;/td&gt;
&lt;td&gt;1234&lt;/td&gt;
&lt;td&gt;4022222&lt;/td&gt;
&lt;td&gt;1%&lt;/td&gt;
&lt;td&gt;/run&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;tmpfs&lt;/td&gt;
&lt;td&gt;4023456&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;4023456&lt;/td&gt;
&lt;td&gt;0%&lt;/td&gt;
&lt;td&gt;/sys/fs/cgroup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/dev/mmcblk1p1&lt;/td&gt;
&lt;td&gt;6233392&lt;/td&gt;
&lt;td&gt;2123456&lt;/td&gt;
&lt;td&gt;4109936&lt;/td&gt;
&lt;td&gt;35%&lt;/td&gt;
&lt;td&gt;/boot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/dev/sda1&lt;/td&gt;
&lt;td&gt;976762584&lt;/td&gt;
&lt;td&gt;234567890&lt;/td&gt;
&lt;td&gt;742194694&lt;/td&gt;
&lt;td&gt;25%&lt;/td&gt;
&lt;td&gt;/mnt/data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/dev/mmcblk0p1&lt;/td&gt;
&lt;td&gt;6233392&lt;/td&gt;
&lt;td&gt;3123456&lt;/td&gt;
&lt;td&gt;3109936&lt;/td&gt;
&lt;td&gt;50%&lt;/td&gt;
&lt;td&gt;/storage/3454-3377&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;tmpfs&lt;/td&gt;
&lt;td&gt;4023456&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;4023444&lt;/td&gt;
&lt;td&gt;1%&lt;/td&gt;
&lt;td&gt;/run/user/1000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/storage/3454-3377&lt;/td&gt;
&lt;td&gt;3488388&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;36637727&lt;/td&gt;
&lt;td&gt;6%&lt;/td&gt;
&lt;td&gt;/mnt&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;Look at the last line of the output—it typically contains the mount point of your SD card.&lt;/p&gt;

&lt;p&gt;In this example, the external SD card is mounted at:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;/storage/3454-3377&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is the value you need to use when creating the symlink.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;Step 2: Create a Symlink to the SD Card&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once you have the SD card name, create a symlink to it using the following command (replace 3454-3377 with the actual name of your SD card):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ln -s /storage/3454-3377 ~/sdcard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command creates a symbolic link (~/sdcard) in your home directory, allowing you to access your SD card easily without navigating through long directory paths.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Setting Up a Powerful Shell (Oh My Zsh &amp;amp; Oh My Posh)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 1:&lt;/strong&gt; Install and Configure Oh My Zsh
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pkg install zsh -y
chsh -s zsh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart Termux, then install Oh My Zsh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install the Powerlevel10k theme for a better experience:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/.oh-my-zsh/custom/themes/powerlevel10k
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set the theme in ~/.zshrc:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nano ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Change the line:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ZSH_THEME="powerlevel10k/powerlevel10k"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Save and exit (CTRL + X, then Y, then ENTER).&lt;/p&gt;

&lt;p&gt;Restart Termux:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;source ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Step 2:&lt;/strong&gt; Install and Configure Oh My Posh (Optional)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pkg install oh-my-posh -y
oh-my-posh font install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To use Oh My Posh, add this to ~/.zshrc:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;eval "$(oh-my-posh init zsh --config ~/.config/oh-my-posh/theme.json)"&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. Installing Git for Version Control
&lt;/h2&gt;

&lt;p&gt;Git is essential for managing your code and collaborating with others.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pkg install git -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace "YourName" and "&lt;a href="mailto:your@email.com"&gt;your@email.com&lt;/a&gt;" with your preferred Git username and email address.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git config --global user.name "YourName"
git config --global user.email "your@email.com"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To check if Git is working:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git --version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  4. Setting Up Neovim and configure it with LunarVim for Coding
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step:&lt;/strong&gt; Install Neovim
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pkg install neovim -y

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To check whether neovim have installed properly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nvim --version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;step 2:&lt;/strong&gt; Install LunarVim
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pkg install python rust nodejs ripgrep make fd -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Resolve EACCES permissions when installing packages globally&lt;/em&gt;&lt;/strong&gt; to avoid error when installing packages with npm.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To minimize the chance of permissions errors, you can configure npm to use a different directory. In this example, you will create and use hidden directory in your home directory.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On the command line, in your home directory, create a directory for global installations:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    mkdir -p ~/.npm-global/lib
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Configure npm to use the new directory path:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm config set prefix '~/.npm-global'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;In your preferred text editor, open  ~/.zshrc file and add this line:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export PATH=~/.npm-global/bin:$PATH
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;On the command line, update your system variables:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;source ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;To test your new configuration, install a package globally without using sudo:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install -g jshint
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, run the below command in the terminal to install lunarvim :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LV_BRANCH='release-1.4/neovim-0.9' bash &amp;lt;(curl -s https://raw.githubusercontent.com/LunarVim/LunarVim/release-1.4/neovim-0.9/utils/installer/install.sh)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Type &lt;strong&gt;yes&lt;/strong&gt; whenever prompted during installation.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run LunarVim:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;lvim
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For plugins, edit ~/.config/lvim/config.lua :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;lvim ~/.config/lvim/config.lua
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Essential Plugins for Web Development&lt;/p&gt;

&lt;p&gt;Add these to your LunarVim config &lt;strong&gt;&lt;em&gt;(~/.config/lvim/config.lua):&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;lvim.plugins = {
  {"neoclide/coc.nvim", branch = "release"},
  {"preservim/nerdtree"},
  {"tpope/vim-fugitive"},
  {"vim-airline/vim-airline"},
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now to save and restart LunarVim, type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;:lvimreload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To make lunarvim your default editor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export EDITOR=lvim
echo 'export EDITOR=lvim' &amp;gt;&amp;gt; ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  5. Setting Up a Live Server for wev-development.
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Install Live Server and configure it :
add the following lines in &lt;strong&gt;&lt;em&gt;"/.config/lvim/config.lua"&lt;/em&gt;&lt;/strong&gt; inside lvim.plugins{...}
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    'barrett-ruth/live-server.nvim',
    build = 'pnpm add -g live-server',
    cmd = { 'LiveServerStart', 'LiveServerStop' },
    config = true
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To start a live server in your project folder through lunarvim, type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;:LiveServerStart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, it will automatically open project at &lt;a href="http://localhost:8080" rel="noopener noreferrer"&gt;http://localhost:8080&lt;/a&gt; in a default browser (using a browser that supports local networking, like Firefox,chrome,etc).&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Additional Tweaks for a Better Experience
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;Enable Clipboard Support&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install termux-api if not already installed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pkg install termux-api -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;To copy to clipboard:&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo "Hello, Termux!" | termux-clipboard-set
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;To paste:&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;termux-clipboard-get
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;Enable Storage Access&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Run the following command to allow Termux to access your phone's storage:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; termux-setup-storage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;Your internal storage will be available in:&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;/storage/emulated/0/&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;Enable X11 Support for GUI Apps&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want to run GUI applications (e.g., a browser, VS Code alternative), install a VNC server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pkg install tigervnc
vncserver
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, connect using a VNC client.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Running a Complete Web Development Workflow
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 1:&lt;/strong&gt; Clone a Web Project
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/your-username/your-project.git
cd your-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Step 2:&lt;/strong&gt; Start Neovim/LunarVim
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;lvim index.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Step 3:&lt;/strong&gt; Run the Live Server from inside lunarvim
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;:LiveServerStart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Opens &lt;a href="http://localhost:8080" rel="noopener noreferrer"&gt;http://localhost:8080&lt;/a&gt; on a default browser.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;With this setup, your &lt;strong&gt;Android phone&lt;/strong&gt; can become a &lt;strong&gt;powerful web development machine!&lt;/strong&gt; You now have:&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Oh My Zsh &amp;amp; Oh My Posh&lt;/strong&gt; for a great shell experience&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Git&lt;/strong&gt; for version control&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Neovim/LunarVim&lt;/strong&gt; for advanced coding&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Node.js&lt;/strong&gt; with a &lt;strong&gt;Live Server&lt;/strong&gt; for real-time development&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>linux</category>
      <category>programming</category>
    </item>
    <item>
      <title>The Complete Guide to Linux Gaming: Setting Up Wine, Proton, and Dependencies.</title>
      <dc:creator>Hishantik Sarkar</dc:creator>
      <pubDate>Tue, 11 Feb 2025 04:35:31 +0000</pubDate>
      <link>https://forem.com/hishantik/gaming-on-linux-using-wineproton-with-dxvk-a-complete-guide-2mh6</link>
      <guid>https://forem.com/hishantik/gaming-on-linux-using-wineproton-with-dxvk-a-complete-guide-2mh6</guid>
      <description>&lt;p&gt;For years, gaming on Linux was considered an adventure reserved for the most dedicated enthusiasts. Closed-source games simply didn't run, compatibility was hit-or-miss, and the general consensus was that if you wanted to play games, you needed Windows. That narrative has fundamentally shifted. With the rise of Wine-based compatibility layers, Steam's Proton initiative, and an increasingly supportive gaming ecosystem, Linux has become a legitimate platform for PC gaming. This guide will walk you through everything you need to know to set up your Linux system for gaming, including installation instructions for Ubuntu, Arch Linux, and other popular distributions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the Linux Gaming Landscape
&lt;/h2&gt;

&lt;p&gt;Before diving into installation commands, it's worth understanding what makes Linux gaming possible today. At the heart of this ecosystem lies Wine, a compatibility layer that translates Windows API calls into their Linux equivalents. Wine isn't an emulator in the traditional sense—it's a translation layer that allows Windows applications to run on Unix-like systems by intercepting system calls and replacing them with POSIX-compliant alternatives.&lt;/p&gt;

&lt;p&gt;Proton, developed by Valve Corporation in collaboration with CodeWeavers, builds directly upon Wine with additional enhancements specifically tailored for gaming. Proton includes DirectX 9, 10, and 11 support (via Vulkan-based translation), improved controller compatibility, better fullscreen support, and deep integration with Steam. What makes Proton particularly powerful is that it comes pre-configured with Steam, meaning many Windows games can be played on Linux with zero additional setup.&lt;/p&gt;

&lt;p&gt;The gaming landscape extends beyond just Wine and Proton, though. You'll also encounter tools like Lutris for managing games from multiple sources (GOG, Epic, standalone installers), PlayOnLinux for organizing Wine prefixes, and various compatibility launchers. Understanding these tools—and when to use each—will make your Linux gaming experience much smoother.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prerequisites and System Preparation
&lt;/h3&gt;

&lt;p&gt;Before installing any gaming-related software, ensure your system meets a few basic requirements. Your graphics drivers are the most critical component here. For NVIDIA users, you'll want the proprietary drivers rather than the open-source nouveau alternative, as they provide significantly better performance and proper Vulkan support. AMD and Intel users generally fare well with open-source drivers, though AMD's proprietary driver (AMDGPU-PRO) exists for enterprise users who need its specific feature set.&lt;/p&gt;

&lt;p&gt;You should also verify that your system has the necessary 32-bit architecture support enabled. Many Windows games are 32-bit applications, and Wine requires 32-bit libraries to run them. Most modern distributions enable this by default, but we'll cover specific commands to ensure it's configured correctly on each platform.&lt;/p&gt;

&lt;h3&gt;
  
  
  Setting Up Ubuntu and Debian-Based Distributions
&lt;/h3&gt;

&lt;p&gt;Ubuntu and its derivatives (Linux Mint, Pop!_OS, elementary OS) share a common package management foundation, making their setup process nearly identical. The process begins with enabling 32-bit architecture support and updating your package lists.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dpkg &lt;span class="nt"&gt;--add-architecture&lt;/span&gt; i386
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, you'll install the foundational graphics libraries. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For NVIDIA graphics cards, the proprietary driver package includes everything you need:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;nvidia-driver-525 libnvidia-gl-525 libnvidia-gl-525:i386 libvulkan1 libvulkan1:i386 mesa-vulkan-drivers mesa-vulkan-drivers:i386
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;AMD users should install the Mesa Vulkan drivers and relevant libraries:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;mesa-vulkan-drivers mesa-vulkan-drivers:i386 libgl1-mesa-dri libgl1-mesa-dri:i386 libgles2-mesa-dri libgles2-mesa-dri:i386
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Intel users typically need the same Mesa packages as AMD users, plus potentially the Intel Media driver for hardware-accelerated video playback:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;intel-media-va-driver-non-free mesa-vulkan-drivers mesa-vulkan-drivers:i386
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now comes theWine installation. The Ubuntu Wine team maintains a repository that offers newer Wine versions than the default repositories. Add the Wine repository with these commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /etc/apt/keyrings
wget &lt;span class="nt"&gt;-qO-&lt;/span&gt; https://dl.winehq.org/wine-builds/winehq.key | &lt;span class="nb"&gt;sudo &lt;/span&gt;gpg &lt;span class="nt"&gt;--dearmor&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /etc/apt/keyrings/winehq-archive.key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"deb [signed-by=/etc/apt/keyrings/winehq-archive.key] https://dl.winehq.org/wine-builds/ubuntu/ &lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;lsb_release &lt;span class="nt"&gt;-cs&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; main"&lt;/span&gt;|sudo &lt;span class="nb"&gt;tee&lt;/span&gt; /etc/apt/sources.list.d/winehq.list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Update your package list again and install Wine:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--install-recommends&lt;/span&gt; winehq-stable
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For users who prefer the development or staging branches (which sometimes offer better compatibility with newer games), replace winehq-stable with winehq-devel or winehq-staging. The staging branch includes experimental patches that can improve compatibility with certain titles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Proton installation is simpler since it integrates directly with Steam. Install Steam through the Ubuntu software center or via command line:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;steam
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After installing Steam, launch it, go to Steam &amp;gt; Settings &amp;gt; Steam Play, and ensure "Enable Steam Play for all titles" is checked. Steam will automatically download and configure the appropriate Proton version for your games.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For enhanced gaming functionality, consider installing these additional packages:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;gamemode libgamemode0 libgamemode-dev mangohud mangohud:i386 goverlay
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Gamemode automatically optimizes system resources when gaming, MangoHUD displays performance metrics during gameplay, and GOverlay provides a graphical interface for MangoHUD configuration.&lt;/p&gt;

&lt;h3&gt;
  
  
  Setting Up Arch Linux and Manjaro
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Arch Linux offers a more hands-on approach to software installation, with the Arch User Repository (AUR) providing access to an enormous range of software, including gaming tools. Start by ensuring your system is up to date:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-Syu&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Enable the multilib repository for 32-bit support by editing /etc/pacman.conf, uncommenting the following lines:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;[&lt;span class="n"&gt;multilib&lt;/span&gt;]
&lt;span class="n"&gt;Include&lt;/span&gt; = /&lt;span class="n"&gt;etc&lt;/span&gt;/&lt;span class="n"&gt;pacman&lt;/span&gt;.&lt;span class="n"&gt;d&lt;/span&gt;/&lt;span class="n"&gt;mirrorlist&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Sync the new repositories:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-Syu&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Install your graphics drivers. For NVIDIA systems:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-S&lt;/span&gt; nvidia nvidia-utils lib32-nvidia-utils vulkan-icd-loader lib32-vulkan-icd-loader
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;AMD users should install:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-S&lt;/span&gt; mesa lib32-mesa vulkan-radeon lib32-vulkan-radeon  libva-mesa-driver lib32-libva-mesa-driver
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Intel users can use:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-S&lt;/span&gt; mesa lib32-mesa intel-media-driver libva-intel-driver vulkan-intel lib32-vulkan-intel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Wine installation on Arch is straightforward since it's in the official repositories. Install both the 64-bit and 32-bit versions:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-S&lt;/span&gt; wine wine-mono wine-gecko
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-S&lt;/span&gt; lib32-wine lib32-wine-mono lib32-wine-gecko
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;For users who prefer the staging repository (which includes performance improvements and bug fixes not yet in stable Wine):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-S&lt;/span&gt; wine-staging wine-staging-mono wine-staging-gecko
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-S&lt;/span&gt; lib32-wine-staging lib32-wine-staging-mono lib32-wine-staging-gecko
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Proton installation is still handled through Steam, but Arch users might want to install the latest Proton version from the AUR (Arch User Repository):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yay &lt;span class="nt"&gt;-S&lt;/span&gt; protonup-qt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ProtonUp-Qt is a tool that helps you install different versions of ProtonGE (a community-enhanced version of Proton) and &lt;strong&gt;DXVK&lt;/strong&gt; for Steam and Lutris; it usually offers better compatibility with the latest games.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gaming utilities are readily available in the official repositories:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-S&lt;/span&gt; gamemode mangohud goverlay protontricks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Protontricks is a powerful script that helps you install Windows runtime libraries in specific Wine prefixes, which is crucial for running games that depend on DirectX or specific Windows components.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Arch AUR also offers many specialized game-related tools:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yay &lt;span class="nt"&gt;-S&lt;/span&gt; lutris-git heroic-games-launcher-bin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lutris is a game manager that handles games from various platforms (GOG, Epic, emulators, indie games), while Heroic is a launcher specifically for the Epic Games Store.&lt;/p&gt;

&lt;h3&gt;
  
  
  Setting Up Fedora and Red Hat-Based Distributions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Fedora takes a slightly different approach, focusing on free and open-source software by default. Gaming setup begins with enabling the RPM Fusion repositories, which provide proprietary and non-free software:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-&lt;span class="si"&gt;$(&lt;/span&gt;rpm &lt;span class="nt"&gt;-E&lt;/span&gt; %fedora&lt;span class="si"&gt;)&lt;/span&gt;.noarch.rpm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-&lt;span class="si"&gt;$(&lt;/span&gt;rpm &lt;span class="nt"&gt;-E&lt;/span&gt; %fedora&lt;span class="si"&gt;)&lt;/span&gt;.noarch.rpm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Refresh your package cache:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf makecache
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Install graphics drivers. NVIDIA users should be aware that Fedora specifically requires the RPM Fusion version of the driver:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;akmod-nvidia xorg-x11-drv-nvidia-cuda libnvidia-vdpau-driver
&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;xorg-x11-drv-nvidia-libs.i686
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;AMD and Intel users can use Mesa drivers:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;mesa-vulkan-drivers mesa-libGL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;mesa-libGL.i686
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Wine installation on Fedora requires adding the WineHQ repository:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf config-manager &lt;span class="nt"&gt;--add-repo&lt;/span&gt; https://dl.winehq.org/wine-builds/fedora/winehq.repo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;winehq-stable
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;For Plasma users (KDE Plasma desktop), Fedora also makes gaming straightforward with additional utilities:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;gamemode mangohud
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Steam installation follows a pattern similar to other distributions:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;steam
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Setting Up Lutris and Heroic Game Launcher for Wine/Proton
&lt;/h3&gt;

&lt;p&gt;Linux gaming has become increasingly viable thanks to tools like Lutris and Heroic Game Launcher, which simplify running Windows games through compatibility layers. This guide walks you through installing these launchers, configuring Wine and Proton environments, and implementing DXVK for improved Direct3D performance. The focus here is on the post-driver-setup process, assuming your graphics drivers are already properly installed and configured.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installing Lutris Across Different Distributions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lutris serves as a meta-launcher that manages wine prefixes, runtime environments, and game configurations through an intuitive interface. The installation process varies slightly depending on your Linux distribution, so choose the commands appropriate for your system.&lt;/p&gt;

&lt;p&gt;On &lt;strong&gt;Ubuntu-based&lt;/strong&gt; distributions such as Ubuntu, Linux Mint, or Pop!_OS, add the official Lutris repository and install the application. First, install the necessary dependencies and repository signing key, then add the repository itself before finally installing Lutris. This process ensures you receive the latest stable version directly from the project's maintained packages rather than relying on potentially outdated distribution repositories.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;Fedora, RHEL, or CentOS&lt;/strong&gt; users, the process involves enabling the RPM Fusion Free repository, which contains the Lutris package. After enabling the repository, a straightforward dnf install command fetches all required dependencies and the application itself. Arch Linux and Arch-based distributions like Manjaro benefit from Lutris being available in the Arch User Repository, where installation through your preferred AUR helper provides the most up-to-date version.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installing Heroic Game Launcher&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Heroic specializes in running Epic Games Store titles through Heroic Games Launcher, offering a dedicated interface for managing DRM-free and Epic-exclusive games without requiring the official Epic client. The installation approach mirrors the distribution-specific patterns established with Lutris.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ubuntu&lt;/strong&gt; users should download the official .deb package from the Heroic GitHub releases page and install it using &lt;code&gt;dpkg&lt;/code&gt; or your preferred package manager, then fix any dependency issues that arise during initial installation. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fedora&lt;/strong&gt; users can add the Heroic COPR repository, which provides automated builds and updates through a one-time repository enablement command followed by a standard package installation. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Arch Linux&lt;/strong&gt; users again have the advantage of &lt;em&gt;AUR&lt;/em&gt; availability, where installation proceeds identically to Lutris through your chosen &lt;em&gt;AUR&lt;/em&gt; helper.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flatpak&lt;/strong&gt; installation offers a distribution-agnostic approach that works across any distribution supporting Flatpak. Add the Flathub repository if you haven't already, then install Heroic through your software center or via command line using flatpak install, which ensures you receive a sandboxed, self-contained application package.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configuring Wine and Proton Environments&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Both launchers require Wine or Proton installations to run Windows applications, and proper configuration significantly impacts performance and compatibility. &lt;strong&gt;Lutris&lt;/strong&gt; allows you to install multiple Wine versions simultaneously, toggling between them on a per-game basis. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Access the preferences menu, navigate to the runners section, and install recommended Wine versions—typically the latest stable release alongside a GE (Gaming Enhanced) build from the Glorious Eggroll project, which includes patches specifically for gaming performance.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Heroic&lt;/strong&gt; integrates Proton functionality through Steam's Proton, which requires Steam to be installed on your system even if you don't actively use it for gaming. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Enable Proton in Heroic's settings, and the launcher automatically detects and utilizes available Proton versions. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For games that struggle with newer Proton releases, configuring an older version through Heroic's per-game settings often resolves compatibility issues.&lt;/p&gt;

&lt;p&gt;Creating separate Wine prefixes for each game prevents library conflicts and allows fine-tuned optimization without affecting your entire library. Lutris creates prefixes automatically in your designated games directory, while Heroic manages Epic Games titles within its own prefix structure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implementing DXVK for Direct3D Performance&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;DXVK translates Direct3D 9, 10, and 11 calls to Vulkan, the graphics API native to Linux, providing substantial performance improvements for many Direct3D-based games. Both launchers support DXVK installation through their runner configuration interfaces.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;Lutris&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;select your Wine runner, access runner options, and enable DXVK&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;if it isn't included with your selected Wine version. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Manually downloading DXVK releases and extracting them into your game's prefix folder inside the drive_c/windows/system32 directory offers more control over versioning. Heroic includes DXVK management within its settings menu under the DXVK tab, allowing per-game version selection including DXVK-native and D9VK variants for older titles.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For maximum compatibility, match your &lt;strong&gt;DXVK&lt;/strong&gt; version to your game era—newer &lt;strong&gt;DXVK&lt;/strong&gt; releases work best with recent games, while older versions often prove more stable for titles from the Direct3D 9 or early 10 era. Testing different versions helps identify the optimal configuration for problematic titles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Optimization Arguments and Distribution-Specific Tuning&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Performance tuning involves export variables set before launching games, which both launchers support through their environment variable configuration fields. These optimizations apply regardless of your distribution.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;PROTON_NO_ESYNC=1&lt;/code&gt; export addresses stability issues with certain games that don't properly handle esync, while &lt;code&gt;PROTON_NO_FSYNC=1&lt;/code&gt; serves the same purpose for games experiencing issues with newer kernel synchronization features. For AMD GPU users, &lt;code&gt;RADV_PERFTEST=esync&lt;/code&gt; and the more aggressive &lt;code&gt;vk_xwayland_scale=0&lt;/code&gt; setting can improve frame pacing and reduce input latency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nvidia&lt;/strong&gt; users should ensure the &lt;code&gt;nvidia-drm modeset=1&lt;/code&gt; kernel parameter appears in your bootloader configuration for proper Wayland support and reduced stuttering when using &lt;em&gt;Vulkan&lt;/em&gt; applications. Frame rate limiters through &lt;em&gt;mangoHud&lt;/em&gt; or the in-game settings prevent unnecessary GPU load that generates heat and power consumption without visual benefit.&lt;/p&gt;

&lt;p&gt;Distribution-specific considerations include enabling Game Mode through &lt;strong&gt;gamemoded&lt;/strong&gt;, which Ubuntu and Fedora users install from their default repositories. Arch users find gamemoded in the AUR. This daemon optimizes system resources when gaming by scaling CPU governors, preventing power-saving states from interfering with performance-sensitive applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  Advanced Configuration and Optimization
&lt;/h3&gt;

&lt;p&gt;With the basic installation complete, optimizing your gaming environment significantly improves performance and compatibility. Creating a dedicated Wine prefix for each game helps prevent conflicts between different games' dependencies and provides a clean environment for troubleshooting when issues arise.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create a new Wine prefix using:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;WINEPREFIX&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;~/.wine/mygame &lt;span class="nv"&gt;WINEARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;win32 wineboot &lt;span class="nt"&gt;-u&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command creates a 32-bitprefix in your home directory. The WINEPREFIX environment variable tells Wine where to store this particular installation, keeping it separate from your default prefix.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installing specific Windows dependencies often resolves compatibility issues. Protontricks simplifies this process considerably:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;protontricks &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"Game Name"&lt;/span&gt;
protontricks 1234567 dotnet48 vcrun2019
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Some games require specific graphics settings to run properly. You can configure Wine settings using winecfg:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;winecfg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The winecfg dialog allows you to set Windows version compatibility (Windows 10 recommended for most modern games), configure graphics settings including virtual desktop resolution, and manage DLL overrides for specific libraries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For Steam games specifically, you can pass launch options to customize how games run. Right-click a game in your library, select Properties, and enter launch options:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;PROTON_NO_ESYNC&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 %command%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;PROTON_NO_ESYNC&lt;/code&gt; flag disables esync, which can resolve issues on some systems. Other useful proton environment variables include &lt;code&gt;PROTON_DUMP_DEBUG_INFO&lt;/code&gt; (for debugging), and &lt;code&gt;PROTON_USE_WINEDBG&lt;/code&gt; (which provides more detailed error reporting).&lt;/p&gt;

&lt;h3&gt;
  
  
  Troubleshooting Common Issues
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Even with perfect setup, you'll occasionally encounter issues. Black screens upon launching games often indicate driver problems—ensure your Vulkan installation is correct and that you're using the appropriate graphics card. You can verify Vulkan functionality with:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vulkaninfo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Performance issues frequently relate to system configuration rather than software setup. Gamemode should activate automatically for Steam games, but you can verify its operation:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gamemoded &lt;span class="nt"&gt;-s&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sound problems in games sometimes require configuring Wine to use a specific audio backend. Edit your winecfg and navigate to the Audio tab to experiment with different options if sound isn'tworking correctly.&lt;/p&gt;

&lt;p&gt;Games that crash on startup may need specific Windows DLLs or runtime libraries. The Wine Application Database (winehq.org) maintains extensive compatibility ratings and user-reported solutions for thousands of games.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Broader Linux Gaming Ecosystem
&lt;/h2&gt;

&lt;p&gt;With your gaming environment configured, exploring the broader Linux gaming ecosystem enhances your experience significantly. Lutris connects to multiple game platforms, automatically configuring Wine prefixes and dependencies for hundreds of games. After installation, you can add games through Lutris' browser extension, with most major titles having community-contributed installation scripts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For Epic Games Store titles, Heroic provides a native Linux experience:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flatpak &lt;span class="nb"&gt;install &lt;/span&gt;flathub com.heroicgameslauncher.HGL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Heroic supports importing your Epic library and managing games similarly to Steam, with Proton compatibility built-in.&lt;/p&gt;

&lt;p&gt;Linux gaming continues evolving rapidly, with the Steam Deck demonstrating that Linux can provide an excellent gaming experience even for casual users. The tools and techniques covered in this guide position you at the forefront of this transformation, giving you access to thousands of games on an operating system that respects your freedom and privacy.&lt;/p&gt;

&lt;p&gt;The community around Linux gaming is remarkably active, with dedicated forums, Discord servers, and wiki pages documenting solutions for even the most obscure issues. When you encounter problems, these communities offer valuable support, and contributing your own solutions helps everyone in the ecosystem.&lt;/p&gt;

&lt;p&gt;Your Linux gaming setup is now complete. Start Steam, enable Steam Play, and browse your library—many of your games will work immediately. For titles that need additional configuration, the tools and knowledge you now possess will guide you through optimizations that make Linux gaming not just viable, but in many ways preferable to other platforms.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>opensource</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
