<?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: Jakariya Abbas</title>
    <description>The latest articles on Forem by Jakariya Abbas (@jakariyaaa).</description>
    <link>https://forem.com/jakariyaaa</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%2F1270822%2F4793979e-8d8d-4ebd-8913-ded4bf504efb.png</url>
      <title>Forem: Jakariya Abbas</title>
      <link>https://forem.com/jakariyaaa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/jakariyaaa"/>
    <language>en</language>
    <item>
      <title>How to Clean Paru's Local Repository and Stop Removed Packages from Showing Up During Upgrades</title>
      <dc:creator>Jakariya Abbas</dc:creator>
      <pubDate>Thu, 05 Jun 2025 08:10:47 +0000</pubDate>
      <link>https://forem.com/jakariyaaa/how-to-clean-parus-local-repository-and-stop-removed-packages-from-showing-up-during-upgrades-1d29</link>
      <guid>https://forem.com/jakariyaaa/how-to-clean-parus-local-repository-and-stop-removed-packages-from-showing-up-during-upgrades-1d29</guid>
      <description>&lt;p&gt;If you're using &lt;a href="https://github.com/Morganamilo/paru" rel="noopener noreferrer"&gt;Paru&lt;/a&gt; as your AUR helper and have a local repository set up, you might have noticed something odd: even after uninstalling a package, it still shows up when you run &lt;code&gt;paru -Syu&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This happens because the package still exists in your local repository database. Paru thinks it's something you still want to track or upgrade.&lt;/p&gt;

&lt;p&gt;In this guide, we’ll walk through how to properly clean up your local repo so Paru stops suggesting updates for packages you've already removed.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Happens
&lt;/h2&gt;

&lt;p&gt;Paru doesn't just check installed packages. If you've built packages into your local repository, it also checks the repository database when deciding what to upgrade.&lt;/p&gt;

&lt;p&gt;So even if you uninstall a package, if its metadata is still in the local repo, Paru will include it in upgrade suggestions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Remove the Package from the Local Repo Database
&lt;/h2&gt;

&lt;p&gt;If a package is no longer installed but still being suggested during an upgrade, remove its entry from the local repository database:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;paru &lt;span class="nt"&gt;-Ld&lt;/span&gt; &amp;lt;package-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example, if you previously added &lt;code&gt;package-bin&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;paru &lt;span class="nt"&gt;-Ld&lt;/span&gt; package-bin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This removes the package entry from the local repo database, but keeps the actual package file on disk.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2: Remove the Package File Too (Optional)
&lt;/h2&gt;

&lt;p&gt;If you want to remove the package file as well (to save space or avoid clutter), use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;paru &lt;span class="nt"&gt;-Ldd&lt;/span&gt; &amp;lt;package-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This removes both the database entry and the package file (&lt;code&gt;.pkg.tar.zst&lt;/code&gt;).&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: Clean Paru’s Build Cache (Optional)
&lt;/h2&gt;

&lt;p&gt;Over time, Paru’s cache can build up with downloaded and compiled package files. You can clear that cache like this:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;You’ll be asked to confirm—say yes to both prompts if you want to fully clear everything. This helps avoid rebuild issues and keeps things tidy.&lt;/p&gt;




&lt;h2&gt;
  
  
  (Alternative) Manually Remove the Package from a Repo Database
&lt;/h2&gt;

&lt;p&gt;If you’re managing a local repo manually (outside of Paru), you can use the &lt;code&gt;repo-remove&lt;/code&gt; tool:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;repo-remove /path/to/localrepo.db.tar.gz &amp;lt;package-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Just replace the path with your actual &lt;code&gt;.db.tar.gz&lt;/code&gt; repo file.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick Summary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What You Want to Do&lt;/th&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Remove package from local DB&lt;/td&gt;
&lt;td&gt;&lt;code&gt;paru -Ld package-name&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Remove from DB + delete file&lt;/td&gt;
&lt;td&gt;&lt;code&gt;paru -Ldd package-name&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clear Paru build cache&lt;/td&gt;
&lt;td&gt;&lt;code&gt;paru -Scc&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Manually remove from repo DB&lt;/td&gt;
&lt;td&gt;&lt;code&gt;repo-remove yourrepo.db package-name&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;After cleaning things up, run &lt;code&gt;paru -Syu&lt;/code&gt; again. You should only see packages that are actually installed and relevant.&lt;/p&gt;

&lt;p&gt;Keeping your local repo clean makes managing AUR packages a lot easier—and avoids confusion when you're updating your system.&lt;/p&gt;

</description>
      <category>archlinux</category>
      <category>beginners</category>
      <category>tutorial</category>
      <category>aur</category>
    </item>
    <item>
      <title>How to Partition Using GParted Live</title>
      <dc:creator>Jakariya Abbas</dc:creator>
      <pubDate>Wed, 14 May 2025 05:09:23 +0000</pubDate>
      <link>https://forem.com/jakariyaaa/how-to-partition-using-gparted-live-4m44</link>
      <guid>https://forem.com/jakariyaaa/how-to-partition-using-gparted-live-4m44</guid>
      <description>&lt;p&gt;When working with Linux systems, managing disk partitions can be an essential task—especially if you want to create space for sharing files between Linux and Windows. One of the most useful tools for partitioning is &lt;strong&gt;GParted Live&lt;/strong&gt;, a bootable tool that allows you to resize, move, or create new partitions safely.&lt;/p&gt;

&lt;p&gt;In this short guide, we’ll walk through how to shrink an existing &lt;code&gt;/home&lt;/code&gt; partition (formatted as ext4) and use the freed space to create a new &lt;strong&gt;exFAT&lt;/strong&gt; partition, ideal for cross-platform compatibility.&lt;/p&gt;




&lt;h3&gt;
  
  
  What You’ll Need
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GParted Live ISO&lt;/strong&gt;: &lt;a href="https://gparted.org/livecd.php" rel="noopener noreferrer"&gt;Download here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;A USB drive or CD to boot GParted Live.&lt;/li&gt;
&lt;li&gt;Backup of important data (always recommended before changing partitions).&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Step 1: Boot Into GParted Live
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Burn the GParted Live ISO to a USB stick or CD.&lt;/li&gt;
&lt;li&gt;Reboot your computer and boot from the USB/CD.&lt;/li&gt;
&lt;li&gt;Follow the startup prompts to load into the GParted interface.&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  Step 2: Shrink the &lt;code&gt;/home&lt;/code&gt; ext4 Partition
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;In GParted, locate the ext4 partition labeled as &lt;code&gt;/home&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Right-click the partition and select &lt;strong&gt;Resize/Move&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;In the resize window, drag the slider to reduce the partition size and leave unallocated space.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Resize/Move&lt;/strong&gt; to confirm.&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  Step 3: Create a New exFAT Partition
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Right-click the newly unallocated space and choose &lt;strong&gt;New&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;For the file system type, select &lt;strong&gt;exFAT&lt;/strong&gt; from the dropdown list.&lt;/li&gt;
&lt;li&gt;Give the partition a label (optional) and click &lt;strong&gt;Add&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: If exFAT doesn’t appear, GParted may be missing exFAT support. In that case, you can format the partition later using &lt;code&gt;mkfs.exfat&lt;/code&gt; on your main Linux system (install with &lt;code&gt;sudo apt install exfatprogs&lt;/code&gt; on Debian/Ubuntu).&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Step 4: Apply Changes
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Click the &lt;strong&gt;green checkmark&lt;/strong&gt; button in the toolbar to apply all operations.&lt;/li&gt;
&lt;li&gt;GParted will now perform the resize and format actions. This may take several minutes.&lt;/li&gt;
&lt;li&gt;Once completed, close GParted and shut down the system.&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  Step 5: Reboot and Verify
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Remove the GParted Live USB/CD and boot back into your normal operating system. You should now see a smaller &lt;code&gt;/home&lt;/code&gt; partition and a new exFAT partition ready to use.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Using GParted Live is one of the safest and most flexible ways to manage disk partitions. Whether you’re resizing Linux partitions or creating file systems for cross-platform use, GParted gives you full control with a clean graphical interface.&lt;/p&gt;

&lt;p&gt;Partitioning can be risky if not done carefully, so always make sure to &lt;strong&gt;back up your data&lt;/strong&gt; before making changes.&lt;/p&gt;

&lt;p&gt;Happy partitioning!&lt;/p&gt;

</description>
      <category>linux</category>
      <category>ubuntu</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
    <item>
      <title>MongoDB vs PostgreSQL: Which One Should You Choose?</title>
      <dc:creator>Jakariya Abbas</dc:creator>
      <pubDate>Thu, 24 Apr 2025 05:34:01 +0000</pubDate>
      <link>https://forem.com/jakariyaaa/mongodb-vs-postgresql-which-one-should-you-choose-1fap</link>
      <guid>https://forem.com/jakariyaaa/mongodb-vs-postgresql-which-one-should-you-choose-1fap</guid>
      <description>&lt;p&gt;MongoDB and PostgreSQL are two of the most popular open-source database systems available today. While they both store and manage data efficiently, they cater to different needs depending on their design philosophies and strengths. This article provides a detailed comparison between MongoDB and PostgreSQL to help you determine which is more suitable for your project.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data Model and Schema
&lt;/h3&gt;

&lt;p&gt;MongoDB is a NoSQL, document-oriented database that stores data in flexible, JSON-like documents (BSON). It is schema-less, which makes it ideal for rapidly evolving applications and use cases involving unstructured or semi-structured data.&lt;/p&gt;

&lt;p&gt;PostgreSQL, on the other hand, is a traditional relational database management system (RDBMS). It stores data in structured tables with predefined schemas. This makes it perfect for applications that rely on strict data consistency and complex relationships.&lt;/p&gt;

&lt;h3&gt;
  
  
  Performance and Scalability
&lt;/h3&gt;

&lt;p&gt;MongoDB is designed for horizontal scalability. It can handle large-scale applications that require high throughput and low latency, especially when dealing with massive volumes of data that change frequently. Its flexibility in schema design also makes it well-suited for agile development environments.&lt;/p&gt;

&lt;p&gt;PostgreSQL provides robust performance for complex queries and transactional operations. It excels in vertical scaling and is highly optimized for read-heavy workloads that require structured querying. While it supports horizontal scaling, it often requires additional configuration and tools to do so effectively.&lt;/p&gt;

&lt;h3&gt;
  
  
  ACID Compliance and Transactions
&lt;/h3&gt;

&lt;p&gt;MongoDB offers ACID compliance at the document level and supports multi-document transactions since version 4.0. However, its transactional capabilities are not as mature or deeply integrated as those in traditional RDBMS systems.&lt;/p&gt;

&lt;p&gt;PostgreSQL is fully ACID-compliant and supports advanced transaction management features. It is a strong choice for applications that require strict data integrity and consistency, such as financial systems or enterprise resource planning (ERP) platforms.&lt;/p&gt;

&lt;h3&gt;
  
  
  Query Language and Features
&lt;/h3&gt;

&lt;p&gt;MongoDB uses a JavaScript-like query language. It is intuitive for developers familiar with JSON and supports powerful aggregation pipelines. However, it does not support traditional SQL JOIN operations.&lt;/p&gt;

&lt;p&gt;PostgreSQL uses SQL, which is standardized and widely adopted. It supports complex queries, JOINs, window functions, subqueries, and more. This makes it especially suitable for data analysis, reporting, and applications that rely on complex querying.&lt;/p&gt;

&lt;h3&gt;
  
  
  Security and Compliance
&lt;/h3&gt;

&lt;p&gt;MongoDB includes essential security features such as authentication, role-based access control, and encryption. However, some advanced features may require additional configuration.&lt;/p&gt;

&lt;p&gt;PostgreSQL provides a robust set of security tools out-of-the-box, including SSL/TLS encryption, role-based access, and row-level security. These features make it well-suited for applications that need to comply with stringent data regulations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Use Cases
&lt;/h3&gt;

&lt;p&gt;MongoDB is ideal for content management systems, IoT platforms, real-time analytics, and other applications where the data model changes frequently or is not strictly structured.&lt;/p&gt;

&lt;p&gt;PostgreSQL shines in use cases that demand data accuracy, consistency, and advanced querying capabilities. Examples include banking systems, government databases, and analytics-heavy applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  Summary Comparison
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;MongoDB&lt;/th&gt;
&lt;th&gt;PostgreSQL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Type&lt;/td&gt;
&lt;td&gt;NoSQL Document Store&lt;/td&gt;
&lt;td&gt;Relational Database (RDBMS)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Schema&lt;/td&gt;
&lt;td&gt;Flexible (Schema-less)&lt;/td&gt;
&lt;td&gt;Fixed (Schema-based)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scalability&lt;/td&gt;
&lt;td&gt;Horizontal (Sharding)&lt;/td&gt;
&lt;td&gt;Vertical (Scaling Up)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transactions&lt;/td&gt;
&lt;td&gt;Limited ACID Support&lt;/td&gt;
&lt;td&gt;Full ACID Compliance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Query Language&lt;/td&gt;
&lt;td&gt;JavaScript-like (BSON)&lt;/td&gt;
&lt;td&gt;SQL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best For&lt;/td&gt;
&lt;td&gt;Unstructured, Dynamic Data&lt;/td&gt;
&lt;td&gt;Structured Data, Complex Queries&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;Both MongoDB and PostgreSQL are powerful tools, but their suitability depends on the specific needs of your application. MongoDB offers flexibility and speed for unstructured data and rapid development. PostgreSQL provides reliability, strong transactional support, and advanced features for complex queries and data integrity.&lt;/p&gt;

&lt;p&gt;Evaluate your application's requirements carefully to choose the right database engine. For rapidly evolving data structures, MongoDB is a great fit. For high levels of data accuracy and complex reporting, PostgreSQL stands out as the preferred choice.&lt;/p&gt;

</description>
      <category>database</category>
      <category>mongodb</category>
      <category>postgres</category>
      <category>discuss</category>
    </item>
    <item>
      <title>How to Create and Use userChrome.css in Firefox</title>
      <dc:creator>Jakariya Abbas</dc:creator>
      <pubDate>Sat, 05 Apr 2025 19:00:18 +0000</pubDate>
      <link>https://forem.com/jakariyaaa/how-to-create-and-use-userchromecss-in-firefox-26g7</link>
      <guid>https://forem.com/jakariyaaa/how-to-create-and-use-userchromecss-in-firefox-26g7</guid>
      <description>&lt;p&gt;Firefox allows interface customization using a file called &lt;code&gt;userChrome.css&lt;/code&gt;. This file can change how Firefox looks by applying custom CSS to its interface. Below is a simple guide to set it up, using "hiding the tab bar" as an example.&lt;/p&gt;




&lt;h4&gt;
  
  
  Step 1: Enable Custom Stylesheets
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Open Firefox and go to &lt;code&gt;about:config&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Search for:
&lt;code&gt;toolkit.legacyUserProfileCustomizations.stylesheets&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Set it to &lt;code&gt;true&lt;/code&gt; by double-clicking.&lt;/li&gt;
&lt;/ol&gt;




&lt;h4&gt;
  
  
  Step 2: Open Your Profile Folder
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;code&gt;about:support&lt;/code&gt; in the address bar.&lt;/li&gt;
&lt;li&gt;Find the &lt;strong&gt;Profile Folder&lt;/strong&gt; row.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Open Folder&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;




&lt;h4&gt;
  
  
  Step 3: Create the &lt;code&gt;userChrome.css&lt;/code&gt; File
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Inside your profile folder, create a folder named &lt;code&gt;chrome&lt;/code&gt; (if it doesn’t already exist).&lt;/li&gt;
&lt;li&gt;Inside the &lt;code&gt;chrome&lt;/code&gt; folder, create a file named &lt;code&gt;userChrome.css&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;




&lt;h4&gt;
  
  
  Step 4: Add Custom CSS
&lt;/h4&gt;

&lt;p&gt;Open &lt;code&gt;userChrome.css&lt;/code&gt; in a text editor and add your custom styles.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Example: Hide the tab bar&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nf"&gt;#TabsToolbar&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;visibility&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;collapse&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save the file after editing.&lt;/p&gt;




&lt;h4&gt;
  
  
  Step 5: Restart Firefox
&lt;/h4&gt;

&lt;p&gt;Close and reopen Firefox to see the changes take effect.&lt;/p&gt;




&lt;h4&gt;
  
  
  Notes
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;You can add more CSS rules to customize other parts of Firefox.&lt;/li&gt;
&lt;li&gt;Hiding the tab bar works best if you use a tab manager extension (like Sidebery or Tree Style Tab) or only use one tab.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>browser</category>
      <category>css</category>
      <category>firefox</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Troubleshoot Your Last Boot Crash on Linux</title>
      <dc:creator>Jakariya Abbas</dc:creator>
      <pubDate>Wed, 26 Mar 2025 10:04:50 +0000</pubDate>
      <link>https://forem.com/jakariyaaa/troubleshoot-your-last-boot-crash-on-linux-11hl</link>
      <guid>https://forem.com/jakariyaaa/troubleshoot-your-last-boot-crash-on-linux-11hl</guid>
      <description>&lt;p&gt;When your Linux system crashes, understanding the cause is crucial for troubleshooting. The &lt;code&gt;journalctl&lt;/code&gt; command helps you analyze system logs, including crash reports. This guide explains how to use &lt;code&gt;journalctl&lt;/code&gt; to check why your system crashed in the last boot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: View Logs from the Previous Boot
&lt;/h2&gt;

&lt;p&gt;To check logs from the last boot, use the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;journalctl &lt;span class="nt"&gt;-b&lt;/span&gt; &lt;span class="nt"&gt;-1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, &lt;code&gt;-b -1&lt;/code&gt; means "show logs from the previous boot." If you want logs from two boots ago, use &lt;code&gt;-b -2&lt;/code&gt;, and so on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Filter Logs for Errors
&lt;/h2&gt;

&lt;p&gt;To see only errors from the last boot, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;journalctl &lt;span class="nt"&gt;-b&lt;/span&gt; &lt;span class="nt"&gt;-1&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;-p 3&lt;/code&gt; option filters logs by priority, showing only errors (priority 3) and higher (critical and alert messages).&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Check Kernel Logs
&lt;/h2&gt;

&lt;p&gt;Kernel messages often contain information about crashes. To see only kernel logs from the last boot, use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;journalctl &lt;span class="nt"&gt;-k&lt;/span&gt; &lt;span class="nt"&gt;-b&lt;/span&gt; &lt;span class="nt"&gt;-1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Identify the Crash Reason with Systemd Logs
&lt;/h2&gt;

&lt;p&gt;To find if systemd recorded any failures, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;journalctl &lt;span class="nt"&gt;-b&lt;/span&gt; &lt;span class="nt"&gt;-1&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; systemd-coredump
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;systemd-coredump&lt;/code&gt; service logs crash dumps of applications, which can help pinpoint the issue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Analyze Segmentation Faults and Core Dumps
&lt;/h2&gt;

&lt;p&gt;If a program caused a segmentation fault, you can check:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;journalctl &lt;span class="nt"&gt;-b&lt;/span&gt; &lt;span class="nt"&gt;-1&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s1"&gt;'segfault'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For core dump analysis, run:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;To inspect a specific core dump:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;coredumpctl info &amp;lt;PID&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;&amp;lt;PID&amp;gt;&lt;/code&gt; with the process ID from the &lt;code&gt;coredumpctl list&lt;/code&gt; output.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Check Power or Hardware Issues
&lt;/h2&gt;

&lt;p&gt;If you suspect power failures or hardware issues, look for messages related to abrupt shutdowns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;journalctl &lt;span class="nt"&gt;-b&lt;/span&gt; &lt;span class="nt"&gt;-1&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s1"&gt;'power off'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To check for disk errors:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;journalctl &lt;span class="nt"&gt;-b&lt;/span&gt; &lt;span class="nt"&gt;-1&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s1"&gt;'I/O error'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By using &lt;code&gt;journalctl&lt;/code&gt;, you can investigate the cause of a system crash and take appropriate action. If logs indicate software issues, updating or reinstalling the package may help. If hardware failures are detected, consider checking system components.&lt;/p&gt;

&lt;p&gt;These easy steps will help you effectively diagnose and resolve crashes in Linux. For more details on journal logs and troubleshooting in Linux, visit ArchWiki:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://wiki.archlinux.org/title/Systemd/Journal" rel="noopener noreferrer"&gt;Systemd Journal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wiki.archlinux.org/title/General_troubleshooting" rel="noopener noreferrer"&gt;General Troubleshooting&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>archlinux</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>linux</category>
    </item>
    <item>
      <title>How to Open Windows .url Files in Arch Linux Using a Bash Script</title>
      <dc:creator>Jakariya Abbas</dc:creator>
      <pubDate>Wed, 19 Mar 2025 08:53:22 +0000</pubDate>
      <link>https://forem.com/jakariyaaa/how-to-open-windows-url-files-in-arch-linux-using-a-bash-script-l28</link>
      <guid>https://forem.com/jakariyaaa/how-to-open-windows-url-files-in-arch-linux-using-a-bash-script-l28</guid>
      <description>&lt;p&gt;Windows &lt;code&gt;.url&lt;/code&gt; files store web shortcuts. If you have &lt;code&gt;.url&lt;/code&gt; files and want to open them in &lt;strong&gt;Linux&lt;/strong&gt;, follow this tutorial to create a &lt;strong&gt;Bash script&lt;/strong&gt; that does it automatically.  &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 1: Create the Script File&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;First, open a terminal and create a new script file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano open-url
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command opens the &lt;strong&gt;Nano&lt;/strong&gt; text editor so you can write the script.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Step 2: Write the Bash Script&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Copy and paste the following code into &lt;strong&gt;Nano&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="c"&gt;#!/bin/bash&lt;/span&gt;

&lt;span class="c"&gt;# Check if a file is provided&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="nt"&gt;-z&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Usage: &lt;/span&gt;&lt;span class="nv"&gt;$0&lt;/span&gt;&lt;span class="s2"&gt; &amp;lt;file.url&amp;gt;"&lt;/span&gt;
    &lt;span class="nb"&gt;exit &lt;/span&gt;1
&lt;span class="k"&gt;fi&lt;/span&gt;

&lt;span class="c"&gt;# Check if the file exists&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Error: File '&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;' not found!"&lt;/span&gt;
    &lt;span class="nb"&gt;exit &lt;/span&gt;1
&lt;span class="k"&gt;fi&lt;/span&gt;

&lt;span class="c"&gt;# Extract URL from the .url file&lt;/span&gt;
&lt;span class="nv"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s1"&gt;'^URL='&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; | &lt;span class="nb"&gt;cut&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt;&lt;span class="s1"&gt;'='&lt;/span&gt; &lt;span class="nt"&gt;-f2&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# Check if URL was found&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="nt"&gt;-z&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$url&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Error: No URL found in '&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;'"&lt;/span&gt;
    &lt;span class="nb"&gt;exit &lt;/span&gt;1
&lt;span class="k"&gt;fi&lt;/span&gt;

&lt;span class="c"&gt;# Open the URL in the default browser&lt;/span&gt;
xdg-open &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$url&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After pasting the script, &lt;strong&gt;save the file&lt;/strong&gt; by pressing:&lt;br&gt;&lt;br&gt;
&lt;code&gt;CTRL + X&lt;/code&gt; → &lt;code&gt;Y&lt;/code&gt; → &lt;code&gt;Enter&lt;/code&gt;  &lt;/p&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;Step 3: Make the Script Executable&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Now, run this command to give the script permission to execute:&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;chmod&lt;/span&gt; +x open-url
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  &lt;strong&gt;Step 4: Make It a System Command&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;To use this script from anywhere in the terminal, move it to &lt;code&gt;/usr/local/bin&lt;/code&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 mv &lt;/span&gt;open-url /usr/local/bin/open-url
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, you can open any &lt;code&gt;.url&lt;/code&gt; file like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;open-url myshortcut.url
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Protip: You can set this as a default application/command to open &lt;code&gt;.url&lt;/code&gt; files when clicked.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;With this simple script, you can &lt;strong&gt;easily open Windows &lt;code&gt;.url&lt;/code&gt; files&lt;/strong&gt; in &lt;strong&gt;Arch Linux&lt;/strong&gt;. It checks if the file exists, extracts the URL, and opens it in your default browser using &lt;code&gt;xdg-open&lt;/code&gt;. &lt;/p&gt;

</description>
      <category>archlinux</category>
      <category>bash</category>
      <category>linux</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Setup fingerprint login on Arch Linux with LightDM</title>
      <dc:creator>Jakariya Abbas</dc:creator>
      <pubDate>Wed, 26 Feb 2025 13:39:39 +0000</pubDate>
      <link>https://forem.com/jakariyaaa/setup-fingerprint-login-on-arch-linux-with-lightdm-50d4</link>
      <guid>https://forem.com/jakariyaaa/setup-fingerprint-login-on-arch-linux-with-lightdm-50d4</guid>
      <description>&lt;h3&gt;
  
  
  1. Check Your Fingerprint Reader
&lt;/h3&gt;

&lt;p&gt;Make sure your fingerprint reader is supported. You can check your device with:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Then look up your reader on &lt;a href="https://fprint.freedesktop.org/supported-devices.html" rel="noopener noreferrer"&gt;list of supported devices&lt;/a&gt; or the &lt;a href="https://gitlab.freedesktop.org/libfprint/wiki/-/wikis/Unsupported-Devices" rel="noopener noreferrer"&gt;list of unsupported devices&lt;/a&gt;. &lt;br&gt;
&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; The list of supported devices is not updated frequently and may be incomplete. It is recommended to test your device before making any conclusions.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Install the Needed Packages
&lt;/h3&gt;

&lt;p&gt;Open a terminal and install fprintd (it will also install libfprint):&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; fprintd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Enroll Your Fingerprint
&lt;/h3&gt;

&lt;p&gt;Run this command in your terminal (replace &lt;em&gt;yourusername&lt;/em&gt; if needed):&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Follow the on-screen instructions to swipe your finger until it says enrollment is complete.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Configure PAM for LightDM
&lt;/h3&gt;

&lt;p&gt;Edit the LightDM PAM file to allow fingerprint login:&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/pam.d/lightdm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At the top of the file, add this line (before any other “auth” lines):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;auth    sufficient   pam_fprintd.so
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then save and close the file.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Restart LightDM
&lt;/h3&gt;

&lt;p&gt;Restart LightDM to apply the changes:&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 lightdm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Restrict Fingerprint Enrollment (Optional)
&lt;/h1&gt;

&lt;p&gt;By default, any user can enroll new fingerprints without authentication. You can change this behavior using polkit rules.  &lt;/p&gt;

&lt;h3&gt;
  
  
  1. Locate the Polkit Configuration Files
&lt;/h3&gt;

&lt;p&gt;Polkit configuration files are stored in two locations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/etc/polkit-1/rules.d/  
/usr/share/polkit-1/rules.d/  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Do not modify files in &lt;code&gt;/usr/share/polkit-1/rules.d/&lt;/code&gt; directly, as they may be overwritten during updates. Instead, copy them to &lt;code&gt;/etc/polkit-1/rules.d/&lt;/code&gt; and edit them there.  &lt;/p&gt;

&lt;h3&gt;
  
  
  2. Restrict Enrollment to Root Only
&lt;/h3&gt;

&lt;p&gt;To allow only the root user to enroll fingerprints, create a new rule file:&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/polkit-1/rules.d/50-net.reactivated.fprint.device.enroll.rules
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add the following content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;polkit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addRule&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;subject&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;net.reactivated.fprint.device.enroll&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;subject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;root&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;polkit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;YES&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;polkit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NO&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save the file and exit.  &lt;/p&gt;

&lt;h3&gt;
  
  
  3. Apply Changes
&lt;/h3&gt;

&lt;p&gt;No reboot is required, but you may need to restart the polkit service for changes to take effect:&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 polkit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, only the root user can enroll new fingerprints.&lt;/p&gt;

&lt;p&gt;This simple setup should allow you to log in using your fingerprint. Enjoy your new login method!&lt;/p&gt;

</description>
      <category>archlinux</category>
      <category>tutorial</category>
      <category>linux</category>
      <category>lightdm</category>
    </item>
    <item>
      <title>Effortless GitHub SSH Authentication on Arch Linux (XFCE) using GNOME Keyring (GPG Agent)</title>
      <dc:creator>Jakariya Abbas</dc:creator>
      <pubDate>Thu, 20 Feb 2025 09:03:11 +0000</pubDate>
      <link>https://forem.com/jakariyaaa/effortless-github-ssh-authentication-on-arch-linux-with-xfce-gnome-keyring-52k1</link>
      <guid>https://forem.com/jakariyaaa/effortless-github-ssh-authentication-on-arch-linux-with-xfce-gnome-keyring-52k1</guid>
      <description>&lt;p&gt;Enhance your workflow with secure, password-free GitHub authentication on Arch Linux. This guide walks you through setting up SSH keys and seamlessly integrating GNOME Keyring for a hassle-free experience on XFCE.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Part 1: Setting Up SSH with GitHub&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 1: Generate an SSH Key&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Run the following command to generate a new SSH key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-keygen &lt;span class="nt"&gt;-t&lt;/span&gt; ed25519 &lt;span class="nt"&gt;-C&lt;/span&gt; &lt;span class="s2"&gt;"user@arch.linux"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;-t ed25519&lt;/code&gt;: Uses the secure Ed25519 algorithm.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-C "user@arch.linux"&lt;/code&gt;: Labels the key with your email.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Follow the prompts to save the key (default location: &lt;code&gt;~/.ssh/id_ed25519&lt;/code&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 2: Start the SSH Agent&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;To manage SSH keys in memory, start the SSH agent:&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;eval&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;ssh-agent &lt;span class="nt"&gt;-s&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Step 3: Add Your SSH Key to the Agent&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-add ~/.ssh/id_ed25519
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Step 4: Copy and Add Your Public Key to GitHub&lt;/strong&gt;
&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;cat&lt;/span&gt; ~/.ssh/id_ed25519.pub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy the output and go to &lt;strong&gt;GitHub → Settings → SSH and GPG keys → New SSH Key&lt;/strong&gt;, paste it, and save.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 5: Test Your SSH Connection&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-T&lt;/span&gt; git@github.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A successful connection returns a GitHub welcome message.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 6: Configure SSH (Optional)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;To avoid manually specifying the SSH key, create a configuration file:&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;touch&lt;/span&gt; ~/.ssh/config
nano ~/.ssh/config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ssh"&gt;&lt;code&gt;&lt;span class="k"&gt;Host&lt;/span&gt; github.com  
  IdentityFile ~/.ssh/id_ed25519  
  AddKeysToAgent &lt;span class="no"&gt;yes&lt;/span&gt;  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save and exit.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 7: Re-Test SSH Connection&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-T&lt;/span&gt; git@github.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your SSH setup is now complete!&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Part 2: Enabling GNOME Keyring for Passwordless SSH on Arch XFCE&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To have your SSH keys unlocked automatically at login, configure GNOME Keyring.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 1: Disable XFCE's Default SSH Agent&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;xfconf-query &lt;span class="nt"&gt;--channel&lt;/span&gt; xfce4-session &lt;span class="nt"&gt;--property&lt;/span&gt; /startup/ssh-agent/enabled &lt;span class="nt"&gt;--create&lt;/span&gt; &lt;span class="nt"&gt;--type&lt;/span&gt; bool &lt;span class="nt"&gt;--set&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Step 2: Install GNOME Keyring&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Using an AUR helper like &lt;code&gt;paru&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;paru &lt;span class="nt"&gt;-S&lt;/span&gt; gnome-keyring seahorse
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This provides &lt;code&gt;gpg-agent&lt;/code&gt;, which will act as your SSH agent.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Step 3: Set the SSH_AUTH_SOCK Environment Variable&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;SSH_AUTH_SOCK&lt;/code&gt; environment variable tells SSH tools where to find the authentication agent. Since GPG agent is being used as the SSH agent, this variable must point to its socket:&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;export &lt;/span&gt;&lt;span class="nv"&gt;SSH_AUTH_SOCK&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;gpgconf &lt;span class="nt"&gt;--list-dirs&lt;/span&gt; agent-ssh-socket&lt;span class="si"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To make this change persistent across reboots, add this line to your &lt;code&gt;~/.bashrc&lt;/code&gt; or &lt;code&gt;~/.zshrc&lt;/code&gt; file.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Step 5: Add Your SSH Key to the Agent&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Now that GPG agent is running with SSH support, add your SSH key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-add ~/.ssh/id_ed25519
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;If your key has a passphrase, you will be prompted.&lt;/li&gt;
&lt;li&gt;The passphrase will be cached according to GPG agent settings.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Step 7: Verify the Key Is Loaded&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;To confirm that your key has been added successfully, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-add &lt;span class="nt"&gt;-l&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;If your key is listed, it means GPG agent is managing it correctly.&lt;/li&gt;
&lt;li&gt;If no keys appear, ensure that GPG agent is running and &lt;code&gt;SSH_AUTH_SOCK&lt;/code&gt; is set correctly.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Your SSH keys are now managed by &lt;strong&gt;GNOME Keyring (GPG Agent)&lt;/strong&gt;, providing a secure and consistent authentication experience. 🎉&lt;/p&gt;

</description>
      <category>ssh</category>
      <category>github</category>
      <category>archlinux</category>
      <category>xfce</category>
    </item>
  </channel>
</rss>
