[{"content":"Welcome to My Linux Journey, your go-to resource for learning Linux, exploring open-source software, and mastering system administration. Created by Youcef, this site offers practical tutorials, in-depth Linux distro reviews, sysadmin tips, and scripting guides to help you level up your tech skills.\nWhether you\u0026rsquo;re a beginner or an experienced user, you\u0026rsquo;ll find valuable content on Linux command-line tutorials and shell tricks,Bash and Python scripting for automation Server setup guides and system administration practices,Open-source tools focused on privacy and performance,Self-hosted applications and home lab setups.Troubleshooting real-world Linux issues\nFollow the journey, gain hands-on experience, and become confident in using and managing Linux systems.\n","date":"28 May 2026","externalUrl":null,"permalink":"/","section":"","summary":"","title":"","type":"page"},{"content":"","date":"28 May 2026","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"","date":"28 May 2026","externalUrl":null,"permalink":"/tags/containers/","section":"Tags","summary":"","title":"Containers","type":"tags"},{"content":"","date":"28 May 2026","externalUrl":null,"permalink":"/tags/devops/","section":"Tags","summary":"","title":"Devops","type":"tags"},{"content":"","date":"28 May 2026","externalUrl":null,"permalink":"/categories/docker/","section":"Categories","summary":"","title":"Docker","type":"categories"},{"content":"","date":"28 May 2026","externalUrl":null,"permalink":"/tags/docker/","section":"Tags","summary":"","title":"Docker","type":"tags"},{"content":" How to Install Docker on Void Linux Step by Step # Docker makes it easy to build, deploy, and manage containerized applications. In this guide, you will learn how to install Docker on Void Linux, enable the Docker service, and configure Docker for non-root users.\nPrerequisites # Before installing Docker, make sure you:\nHave a working Void Linux system Have sudo privileges Have an internet connection Update Your System # First, update your package database and upgrade installed packages.\nsudo xbps-install -Su If updates are available, confirm the installation and wait for the process to finish.\nInstall Docker on Void Linux # Install Docker using the XBPS package manager.\nsudo xbps-install -S docker This command installs the Docker Engine and required dependencies.\nEnable the Docker Service # Void Linux uses runit instead of systemd. To enable the Docker service, create a symbolic link to the service directory.\nsudo ln -s /etc/sv/docker /var/service/ Start and Check Docker Status # Verify that the Docker service is running.\nsudo sv status docker You should see output similar to:\nrun: docker: (pid 1234) 10s Run Docker Without sudo # By default, Docker commands require root privileges. Add your user to the docker group to run Docker commands without sudo.\nsudo usermod -aG docker $USER Apply the new group membership without rebooting.\nnewgrp docker Verify Docker Installation # Run the following command to verify Docker is working correctly.\ndocker run hello-world If Docker is installed correctly, you will see a confirmation message from the Docker container.\nWhy Use Docker on Void Linux? # Docker allows you to:\nRun isolated applications Simplify development environments Deploy applications consistently Manage containers efficiently Void Linux is lightweight and fast, making it a good choice for containerized workloads.\nTroubleshooting # Docker Command Not Found # Log out and log back in after adding your user to the Docker group.\nDocker Service Not Running # Check whether the service link exists.\nls -l /var/service/docker Restart the service if needed.\nsudo sv restart docker Conclusion # You have successfully installed Docker on Void Linux and configured it for everyday use. You can now start running containers and building containerized applications on your system.\nFor more advanced configuration and usage, visit the official Docker documentation.\nDocker Documentation ","date":"28 May 2026","externalUrl":null,"permalink":"/tutorials/install-docker-on-void-linux/","section":"Tutorials - Linux, Android \u0026 Development Guides","summary":"How to Install Docker on Void Linux","title":"How to Install Docker on Void Linux Step by Step","type":"tutorials"},{"content":"","date":"28 May 2026","externalUrl":null,"permalink":"/categories/linux/","section":"Categories","summary":"","title":"Linux","type":"categories"},{"content":"","date":"28 May 2026","externalUrl":null,"permalink":"/tags/linux/","section":"Tags","summary":"","title":"Linux","type":"tags"},{"content":"","date":"28 May 2026","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"","date":"28 May 2026","externalUrl":null,"permalink":"/tags/void-linux/","section":"Tags","summary":"","title":"Void-Linux","type":"tags"},{"content":"","date":"26 May 2026","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","date":"26 May 2026","externalUrl":null,"permalink":"/tags/dm_mod/","section":"Tags","summary":"","title":"Dm_mod","type":"tags"},{"content":" Fix: modprobe FATAL — Module dm_mod Not Found in Void Linux # If your Void Linux system fails to boot and drops you into a recovery shell with the following error:\nmodprobe: FATAL: Module dm_mod not found in directory /lib/modules/6.x.x you are not alone. This is a relatively common issue and is almost always fixable without reinstalling.\nWhat Causes This Error? # The dm_mod kernel module is part of the Device Mapper subsystem, which is required by LVM, LUKS encryption, and several other storage-layer features. This error typically means one of the following:\nKernel modules are missing — the /lib/modules/\u0026lt;version\u0026gt;/ directory is incomplete or absent Kernel version mismatch — the running kernel does not match the installed modules Corrupted or missing initramfs — the initial ramdisk was not generated correctly Incomplete kernel installation — a partial update left the system in an inconsistent state Device Mapper compiled into the kernel directly — instead of as a loadable module (rare) Step 1: Boot from a Void Linux Live ISO # Since the system cannot boot normally, you need to boot from a Void Linux live ISO. You can download the latest one from the official Void Linux downloads page.\nOnce you are in the live environment, open a terminal and proceed to the next step.\nStep 2: Mount Your System and Chroot Into It # Identify your root and boot partitions (use lsblk or fdisk -l if unsure), then mount them and bind the necessary pseudo-filesystems:\n# Replace /dev/sdXY with your actual partitions mount /dev/your_root_partition /mnt mount /dev/your_boot_partition /mnt/boot mount --bind /sys /mnt/sys mount --bind /dev /mnt/dev mount --bind /proc /mnt/proc chroot /mnt Tip: If you use an EFI system, you may also need to mount the EFI partition:\nmount /dev/your_efi_partition /mnt/boot/efi Step 3: Rebuild the Initramfs and Kernel Hooks # Once inside the chroot, run the following command to fully reconfigure all installed packages, including the kernel:\nxbps-reconfigure -fa This single command handles all of the following:\nRebuilds the initramfs Re-runs all kernel hooks Regenerates boot files This is the most reliable fix for missing or broken dm_mod and related module errors on Void Linux.\nStep 4: Verify That dm_mod Exists # After reconfiguring, confirm that the dm-mod module file is now present for your kernel version:\nfind /lib/modules/$(uname -r) -name \u0026#39;dm-mod*\u0026#39; If this returns a path like /lib/modules/6.x.x/kernel/drivers/md/dm-mod.ko.zst, the module is installed correctly.\nNote: Inside a chroot, uname -r returns the kernel version of the live ISO, not your installed system. Either substitute the correct version manually, or check the /lib/modules/ directory directly with ls /lib/modules/.\nStep 5: Regenerate the GRUB Configuration # If your system uses GRUB as its bootloader, regenerate the GRUB configuration to ensure it points to the correct kernel and initramfs:\ngrub-mkconfig -o /boot/grub/grub.cfg Step 6: Reboot # Exit the chroot, unmount everything, and reboot:\nexit umount -R /mnt reboot Your system should now boot normally with dm_mod loading correctly.\nSummary # Step Command Purpose Mount partitions mount /dev/... /mnt Access the broken system Chroot chroot /mnt Work as if running the installed OS Rebuild xbps-reconfigure -fa Fix initramfs, kernel hooks, and boot files Verify find /lib/modules/... -name 'dm-mod*' Confirm the module exists GRUB grub-mkconfig -o /boot/grub/grub.cfg Update bootloader config Reboot reboot Boot into the fixed system Still Not Working? # If the error persists after following all steps, check the following:\nRun xbps-install -Su inside the chroot to ensure the kernel and all packages are fully up to date Verify that linux (or your specific kernel variant like linux-lts) is properly installed: xbps-query linux Check if Device Mapper was intentionally compiled into your kernel rather than as a module — in this case, dm_mod will not appear as a file but the feature is still available Found this helpful? Share it with others using the links below.\n","date":"26 May 2026","externalUrl":null,"permalink":"/tutorials/void_fix_modprobe_fatal_module_dm_mod_not_found/","section":"Tutorials - Linux, Android \u0026 Development Guides","summary":"Encountering ‘modprobe: FATAL: Module dm_mod not found in directory /lib/modules/…’ on Void Linux? This guide walks you through chrooting from a live ISO and rebuilding your initramfs and kernel hooks with xbps-reconfigure.","title":"Fix: modprobe FATAL Module dm_mod Not Found in Void Linux","type":"tutorials"},{"content":"","date":"26 May 2026","externalUrl":null,"permalink":"/tags/initramfs/","section":"Tags","summary":"","title":"Initramfs","type":"tags"},{"content":"","date":"26 May 2026","externalUrl":null,"permalink":"/tags/kernel/","section":"Tags","summary":"","title":"Kernel","type":"tags"},{"content":"","date":"26 May 2026","externalUrl":null,"permalink":"/categories/troubleshooting/","section":"Categories","summary":"","title":"Troubleshooting","type":"categories"},{"content":"","date":"26 May 2026","externalUrl":null,"permalink":"/tags/troubleshooting/","section":"Tags","summary":"","title":"Troubleshooting","type":"tags"},{"content":"","date":"26 May 2026","externalUrl":null,"permalink":"/authors/youcef/","section":"Authors","summary":"","title":"Youcef","type":"authors"},{"content":" The docker-compose.yml file # --- services: suwayomi: image: ghcr.io/suwayomi/suwayomi-server:preview user: 1000:1000 environment: - TZ=${TZ:-Etc/UTC} # Add a TZ variable to .env to change it - DATABASE_TYPE=POSTGRESQL - DATABASE_URL=postgresql://postgresql:5432/${POSTGRES_DB} - DATABASE_USERNAME=${POSTGRES_USER} - DATABASE_PASSWORD=${POSTGRES_PASSWORD} # - USE_HIKARI_CONNECTION_POOL=false # Hikari Connection Pool can cause issues with some installations, but it is much more performant. # Comment these out if you do not use the flaresolverr container at the bottom of this file - FLARESOLVERR_ENABLED=true - FLARESOLVERR_URL=http://flaresolverr:8191 # ################################################################################################# # # !!! IMPORTANT !!! # - server settings can be changed during runtime in the WebUI # - providing an environment variable will OVERWRITE the current setting value when starting the container # # ################################################################################################# # # example for setting env vars: # # - BIND_IP=0.0.0.0 # - BIND_PORT=4567 # - SOCKS_PROXY_ENABLED=false # - DOWNLOAD_AS_CBZ=true # - AUTH_MODE=basic_auth # - AUTH_USERNAME=manga # - AUTH_PASSWORD=hello123 # - EXTENSION_REPOS=[\u0026#34;http://github.com/orginazation-name/repo-name\u0026#34;, \u0026#34;http://github.com/orginazation-name-2/repo-name-2\u0026#34;]v depends_on: postgresql: condition: service_healthy #restart: true volumes: - ./data:/home/suwayomi/.local/share/Tachidesk ports: - \u0026#34;4567:4567\u0026#34; restart: on-failure:3 postgresql: image: postgres:17.6 environment: - POSTGRES_USER=${POSTGRES_USER} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - PGDATA=/data/postgres - POSTGRES_DB=${POSTGRES_DB} - TZ=${TZ:-Etc/UTC} - PGTZ=${TZ:-Etc/UTC} volumes: - ./postgres:/data/postgres restart: unless-stopped healthcheck: test: [\u0026#34;CMD-SHELL\u0026#34;, \u0026#34;pg_isready -d ${POSTGRES_DB} -U ${POSTGRES_USER}\u0026#34;] interval: 10s timeout: 5s retries: 5 start_period: 30s flaresolverr: image: ghcr.io/thephaseless/byparr:latest environment: - TZ=${TZ:-Etc/UTC} restart: unless-stopped Env Example # # ================================ # Global # ================================ TZ=UTC # ================================ # PostgreSQL Database # ================================ POSTGRES_DB=suwayomi POSTGRES_USER=suwayomi POSTGRES_PASSWORD=Z9!aQ2Lk7rP#3dS # ================================ # Optional (advanced) # ================================ # If you later want to move DB to another server: # DATABASE_HOST=postgresql # DATABASE_PORT=5432 create this folder\nmkdir data sudo chown -R 1000:1000 data after that run to pull docker images we need\ndocker composer pull\nthen use this to run containers\ndocker compser up -d\n","date":"14 May 2026","externalUrl":null,"permalink":"/tutorials/how-to-run-sumwaymi-with-postgresdb-using-docker/","section":"Tutorials - Linux, Android \u0026 Development Guides","summary":"","title":"How to Run Sumwaymi With Postgresdb Using Docker","type":"tutorials"},{"content":"","date":"25 April 2026","externalUrl":null,"permalink":"/tags/boot-repair/","section":"Tags","summary":"","title":"Boot Repair","type":"tags"},{"content":"","date":"25 April 2026","externalUrl":null,"permalink":"/tags/chroot/","section":"Tags","summary":"","title":"Chroot","type":"tags"},{"content":"","date":"25 April 2026","externalUrl":null,"permalink":"/tags/dracut/","section":"Tags","summary":"","title":"Dracut","type":"tags"},{"content":"How reinstall the deleted initramfs, vmlinuz, and configuration files on a Void Linux system using a live USB, you\u0026rsquo;ll need to boot from the live ISO, mount your existing Void installation, and then use xbps-install to reinstall the necessary packages. You may also need to recreate the initial RAM disk (initrd) using dracut. Here\u0026rsquo;s a more detailed breakdown:\nBoot from the Void Linux Live USB:\nInsert the live USB and restart your computer. Access the boot menu (usually by pressing F2, F12, Delete, or Esc during startup) and select the USB drive as the boot device. Boot into the Void Linux live environment.\nMount the Existing Void Installation:\nOpen a terminal in the live environment. Identify your root partition (e.g., /dev/sda1 or /dev/nvme0n1p2). Mount the root partition: sudo mount /dev/your_root_partition /mnt. If you have a separate /boot partition, mount it:\nsudo mount /dev/your_boot_partition /mnt/boot. Bind mount necessary directories for chroot: sudo mount --bind /dev /mnt/dev sudo mount --bind /proc /mnt/proc sudo mount --bind /sys /mnt/sys. Chroot into the Existing Installation:\nChange the root directory to your mounted installation:\nsudo chroot /mnt. Reinstall Kernel and Related Packages:\nReinstall the linux package: xbps-install -S linux. Reinstall any other kernel-related packages that were removed, such as kernel headers. Reinstall the void-system-image package (if you used it): xbps-install -S void-system-image.\nRecreate the Initial RAM Disk (initrd):\nUse dracut to generate the initrd:\ndracut -f /boot/initramfs-linux.img $(xbps-query -Rs linux | grep linux | head -n 1 | cut -d \u0026#39; \u0026#39; -f 1). This command uses xbps-query to find the latest installed kernel, extracts the kernel version, and then uses dracut to create a new initramfs file in /boot. Adjust the path /boot/initramfs-linux.img if your initramfs file is located elsewhere.\nUpdate GRUB (if needed):\nIf you\u0026rsquo;ve removed or modified your GRUB configuration, you might need to update it. If you have a separate /boot/grub directory, you may need to mount it as well:\nsudo mount /dev/your_boot_partition /mnt/boot/grub Update GRUB:\ngrub-mkconfig -o /boot/grub/grub.cfg. If your /boot directory is not mounted, you may need to specify the boot directory:\ngrub-mkconfig -o /boot/grub/grub.cfg Exit and Reboot:\nExit the chroot environment: exit.\nUnmount the partitions:\nsudo umount /mnt/dev, sudo umount /mnt/proc, sudo umount /mnt/sys and finally,\nsudo umount /mnt. Reboot your system: sudo reboot.\nThis process should restore your kernel, initramfs, and configuration files, allowing you to boot into your Void Linux installation.\n","date":"25 April 2026","externalUrl":null,"permalink":"/linux/how-to-reinstall-initramfs-vmlinuz-and-kernelon-voidlinux/reinstall-initramfs-vmlinuz-void-linux/","section":"Linux Knowledge Base","summary":"Learn step-by-step how to recover your Void Linux system when initramfs, vmlinuz, or kernel files are deleted, by booting from a live USB and using xbps-install with dracut.","title":"How to Reinstall initramfs, vmlinuz, and Kernel on Void Linux","type":"linux"},{"content":"","date":"25 April 2026","externalUrl":null,"permalink":"/tags/kernel-recovery/","section":"Tags","summary":"","title":"Kernel Recovery","type":"tags"},{"content":"","date":"25 April 2026","externalUrl":null,"permalink":"/tags/system-recovery/","section":"Tags","summary":"","title":"System Recovery","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/expose/","section":"Tags","summary":"","title":"Expose","type":"tags"},{"content":"To make your Docker app accessible from the internet, there are multiple methods, each with different levels of complexity, flexibility, and security. Below is a comprehensive list:\n✅ 1. Port Forwarding on Your Router (Home Server) # Use when: You\u0026rsquo;re hosting from home and don’t want to use third-party services.\nSteps: # Expose Docker container port:\ndocker run -p 8080:80 myapp Login to your router and forward port 8080 to your local machine IP (e.g., 192.168.1.10).\nGet your public IP address: https://whatismyipaddress.com\nAccess from the internet:\nhttp://your-public-ip:8080 🔒 Note: Secure with HTTPS (use reverse proxy + SSL).\n✅ 2. Use a Reverse Proxy (e.g., Nginx, Traefik) + Dynamic DNS # Use when: You want a domain name (e.g., myapp.ddns.net) and/or HTTPS.\nTools: # DuckDNS No-IP Setup: # Run reverse proxy in Docker (e.g., Nginx or Traefik). Point DNS (e.g., yourname.duckdns.org) to your public IP. Forward port 80 and 443 in your router to your Docker host. Use Let\u0026rsquo;s Encrypt (via Certbot or Traefik) to enable HTTPS. ✅ 3. Cloud Hosting (VPS) # Use when: You want full control and a public IP.\nProviders: # DigitalOcean, Linode, Vultr, Hetzner, AWS EC2, etc. Steps: # Deploy your app to a VPS.\nExpose Docker container port:\ndocker run -p 80:80 myapp Assign a domain (optional).\nSecure with HTTPS (e.g., Nginx + Certbot).\n✅ 4. Use Ngrok # Use when: You want a quick test link without setting up port forwarding or domains.\nSteps: # Install Ngrok:\n./ngrok http 8080 Tunnel to your app:\ndocker run -p 8080:80 myapp ./ngrok http 8080 Get a public URL like:\nhttps://randomname.ngrok.io 🟡 Free version has limits; great for testing and demos.\n✅ 5. Tailscale or Zerotier (Private Mesh VPN) # Use when: You want access from anywhere, but privately and securely.\nSteps: # Install Tailscale on your Docker host and your client devices.\nYou can access your app via internal VPN IP like:\nhttp://100.x.y.z:8080 🟢 Good for dev teams or secure internal tools.\n✅ 6. Cloudflare Tunnel (Argo Tunnel) # Use when: You want a free, secure tunnel to a custom domain without port forwarding.\nSteps: # Install cloudflared on host:\ncloudflared tunnel --url http://localhost:8080 Setup DNS in Cloudflare to use your tunnel.\nNo need to expose ports to the internet.\n🛡️ Built-in DDoS protection and HTTPS.\n✅ 7. Use a PaaS (Platform as a Service) # Use when: You want zero server management.\nExamples: # Render Railway Fly.io Heroku You push your Docker image or repo, and they give you a public HTTPS link.\n✅ 8. Reverse SSH Tunnel (with VPS) # Use when: Your host is behind strict NAT or firewall.\nSteps: # On your home machine:\nssh -R 8080:localhost:8080 user@your-vps.com The app becomes available via:\nhttp://your-vps.com:8080 🛠 Requires a VPS and SSH access.\n✅ 9. Expose via Kubernetes Ingress (Advanced) # Use when: You\u0026rsquo;re deploying via Kubernetes and want public access.\nUse Ingress + LoadBalancer or NodePort Manage routing with Nginx or Traefik Ingress Controllers Configure external DNS + HTTPS Summary Table: # Method Best For Needs Public IP? HTTPS Custom Domain Persistent Port Forwarding Home self-hosting ✅ ❌/✅ ❌/✅ ✅ Reverse Proxy + DDNS Secure home setup ✅ ✅ ✅ ✅ VPS Hosting Production apps ✅ ✅ ✅ ✅ Ngrok Quick testing ❌ ✅ ❌/✅ ❌ (Free) Tailscale / Zerotier Private remote access ❌ ❌ ❌ ✅ Cloudflare Tunnel No port forwarding, secure ❌ ✅ ✅ ✅ PaaS (Render, Railway) Zero setup, simple deployment ❌ ✅ ✅ ✅ Reverse SSH Tunnel NAT bypass or remote dev ❌ ❌ ❌ ❌ Kubernetes Ingress Large-scale / production ✅ ✅ ✅ ✅ ","date":"18 March 2026","externalUrl":null,"permalink":"/tutorials/expose-docker-app-internet/","section":"Tutorials - Linux, Android \u0026 Development Guides","summary":"Guide to exposing Docker apps to the internet. Covers port forwarding, reverse proxies (nginx, caddy), tunneling (cloudflared, ngrok), and security best practices.","title":"Expose Docker App to Internet - Methods Guide","type":"tutorials"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/internet/","section":"Tags","summary":"","title":"Internet","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/networking/","section":"Categories","summary":"","title":"Networking","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/reverse-proxy/","section":"Tags","summary":"","title":"Reverse-Proxy","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/tunnel/","section":"Tags","summary":"","title":"Tunnel","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/android/","section":"Categories","summary":"","title":"Android","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/android/","section":"Tags","summary":"","title":"Android","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/audio/","section":"Categories","summary":"","title":"Audio","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/audio/","section":"Tags","summary":"","title":"Audio","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/custom-rom/","section":"Tags","summary":"","title":"Custom-Rom","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/devops/","section":"Categories","summary":"","title":"DevOps","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/fat32/","section":"Tags","summary":"","title":"Fat32","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/ffmpeg/","section":"Tags","summary":"","title":"Ffmpeg","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/file-management/","section":"Categories","summary":"","title":"File Management","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/file-management/","section":"Tags","summary":"","title":"File-Management","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/gapps/","section":"Tags","summary":"","title":"Gapps","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/google-apps/","section":"Tags","summary":"","title":"Google-Apps","type":"tags"},{"content":"After installing LineageOS, Google Apps (GApps) are not included by default, so you must flash them separately from recovery.\nHere’s the safe and correct way to install GApps 👇\n✅ What You Need First # Before installing:\n✔ LineageOS already flashed\n✔ Custom recovery installed (TWRP or Lineage Recovery)\n✔ Correct GApps package:\nAndroid version must match your LineageOS build (e.g., LineageOS 20 → Android 13 → GApps for Android 13)\nArchitecture must match your phone:\narm arm64 x86 / x86_64 (rare, tablets/emulators) Popular GApps providers:\nMindTheGapps (recommended for LineageOS) NikGApps OpenGApps (older Android versions) 📲 Installation Steps # 🔹 1. Boot into Recovery # Power off → then press the hardware key combo for your phone (usually Volume Up + Power)\n🔹 2. (Optional) Wipe Cache # In recovery:\nWipe → Dalvik / ART Cache Wipe → Cache ⚠ Do NOT wipe System or Data unless starting fresh.\n🔹 3. Flash GApps ZIP # In recovery:\nTWRP:\nInstall → select GApps.zip → Swipe to flash Lineage Recovery:\nApply update → Apply from storage → select GApps.zip 🔹 4. Reboot System # After flashing finishes:\nReboot → System First boot may take several minutes ⏳—this is normal.\n⚠ Important Notes # 🔴 Install GApps BEFORE first boot (best practice) # If possible:\nFlash LineageOS Flash GApps THEN reboot Booting LineageOS first without GApps can sometimes cause setup problems.\n🛠 If You Already Booted Without GApps # Usually still fine:\nReboot to recovery Flash the GApps ZIP Wipe Dalvik/Cache Reboot ❓Common Problems # ❌ Bootloop after GApps # → Wrong Android version or wrong architecture → Reflash ROM + correct GApps\n❌ “Insufficient system partition size” # → Use smaller GApps package (pico / core)\n❌ Google Setup crashes # → Clear data of:\nGoogle Play Services Google App Play Store (from Settings → Apps) If you want, tell me:\n• Your phone model 📱 • LineageOS version • Android version\nand I can give exact GApps package recommendations for your device 👍\nIf you have allreade install LineageOS on you system you need only to enable developer Opetions and\nenable Usb debugging than install adbtools on your system after that connect to you pc with usb-data calbe and run :\nadb devivces then you will get\n\u0026gt; adb devices List of devices attached 32011f68b70c46db device after that run\nadb reboot bootloader Download # Lineage Recovery For Samsung Galaxy M20\nPlace it on your PC\nlineage-19.1-20220504-recovery-m20lte.img\nBoot Into Recovery # Power off → Volume Up + Power to boot into TWRP or Lineage Recovery.\ngo Advanced → ADB Sideload → Swipe to start\nadb sideload GApps.zip ","date":"18 March 2026","externalUrl":null,"permalink":"/tutorials/install-gapps-lineageos/","section":"Tutorials - Linux, Android \u0026 Development Guides","summary":"Guide to installing Google Apps on LineageOS after flashing custom ROM. Covers GApps packages, recovery flashing, and post-install configuration.","title":"Install Google Apps on LineageOS - GApps Guide","type":"tutorials"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/kvm/","section":"Tags","summary":"","title":"Kvm","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/lineageos/","section":"Tags","summary":"","title":"Lineageos","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/lineageos/","section":"Categories","summary":"","title":"LineageOS","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/local-server/","section":"Tags","summary":"","title":"Local-Server","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/media/","section":"Categories","summary":"","title":"Media","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/media/","section":"Tags","summary":"","title":"Media","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/mobile/","section":"Categories","summary":"","title":"Mobile","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/mp3/","section":"Tags","summary":"","title":"Mp3","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/offline/","section":"Tags","summary":"","title":"Offline","type":"tags"},{"content":"When you use wget to download a website for offline viewing, you\u0026rsquo;ll need to open the saved files in a web browser. Here’s how to properly display the downloaded website:\nSteps to Display the Downloaded Website Offline # Run wget to Download the Site\nUse a command like this to mirror the website:\nwget --mirror --convert-links --adjust-extension --page-requisites --no-parent https://example.com This saves all files (HTML, CSS, JS, images) in a folder named example.com. Navigate to the Downloaded Folder\nOpen the folder where wget saved the files (e.g., example.com). Look for the main index.html (or similar entry file). Open the Website in a Browser\nDouble-click the index.html file (or drag it into a browser). Alternatively, use: # On Linux/Mac (replace with your browser if needed) firefox example.com/index.html # On Windows (via Command Prompt) start chrome \u0026#34;example.com\\index.html\u0026#34; Verify Offline Functionality\nDisable your internet connection. Refresh the page—it should load without errors. Fixing Common Issues # Broken Links?\n--convert-links in wget should fix most internal links, but some JavaScript-based sites may still fail.\nMissing Resources?\nEnsure --page-requisites was used. If assets are missing, manually check the folder structure.\nDynamic Sites (PHP/API Calls)?\nThese won’t work offline—only static sites can be fully mirrored.\nAlternative: Run a Local Server (For Better Compatibility) # If links still don’t work, serve the folder via a local web server:\nPython (Quick Server):\npython3 -m http.server 8000 Then open http://localhost:8000/example.com in your browser.\nNode.js (http-server):\nnpx http-server ./example.com This avoids browser security restrictions on local file access.\nSummary # Use wget with --mirror and --convert-links for best results. Open the saved index.html in a browser. For complex sites, run a local server (python -m http.server). ","date":"18 March 2026","externalUrl":null,"permalink":"/tutorials/run-website-offline-linux/","section":"Tutorials - Linux, Android \u0026 Development Guides","summary":"Guide to running and displaying websites downloaded with wget for offline viewing. Covers directory structure, local server options, and browser viewing.","title":"Run Downloaded Website Offline","type":"tutorials"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/split/","section":"Tags","summary":"","title":"Split","type":"tags"},{"content":"That ffmpeg command splits an MP3 file into 5-minute chunks without re-encoding. Here’s a clear breakdown:\nWhat each part does # -i input.mp3 Uses input.mp3 as the source file.\n-f segment Tells ffmpeg to use the segment muxer (for splitting files).\n-segment_time 300 Sets each segment to 300 seconds (5 minutes).\n-c copy Copies the audio stream as-is (fast, no quality loss).\noutput_%03d.mp3 Output filenames like:\noutput_000.mp3 output_001.mp3 output_002.mp3 Important things to know # ⏱️ Cut points depend on MP3 frame boundaries Segments may not be exactly 300 seconds.\n⚡ Very fast because it doesn’t re-encode.\nCommon variations # Start numbering at 1\nffmpeg -i input.mp3 -f segment -segment_time 300 -segment_start_number 1 -c copy output_%03d.mp3 Force exact 5-minute segments (re-encodes audio)\nffmpeg -i input.mp3 -f segment -segment_time 300 -c:a libmp3lame output_%03d.mp3 Split into 10-minute chunks\nffmpeg -i input.mp3 -f segment -segment_time 600 -c copy output_%03d.mp3 Split by timestamps listed in a file\nffmpeg -i input.mp3 -f segment -segment_times 300,600,900 -c copy output_%03d.mp3 ","date":"18 March 2026","externalUrl":null,"permalink":"/tutorials/split-mp3-chunks-ffmpeg/","section":"Tutorials - Linux, Android \u0026 Development Guides","summary":"Guide to splitting MP3 files into 5-minute chunks without re-encoding using FFmpeg. Uses -c copy for fast lossless audio extraction.","title":"Split .MP3 Chunks - FFmpeg No Re-encoding","type":"tutorials"},{"content":"The error:\nmv: error writing \u0026#39;/mnt/as.zip\u0026#39;: File too large means that the destination file system (in this case, likely mounted at /mnt/) does not support large files, typically files over 2 GB or 4 GB in size.\nCommon causes # FAT32 file system — has a 4 GB file size limit. ext3 (with certain configurations) — may have issues with very large files. Filesystem is mounted with size limitations or quotas. ✅ Solution Options # 🔍 1. Check the file system type: # Run:\ndf -T /mnt Look at the Type column — if it\u0026rsquo;s vfat (FAT32), it has a 4 GB file size limit.\n💡 2. Solutions: # ✅ a. Reformat the destination with a large-file-friendly filesystem: # Use exFAT, NTFS, ext4, XFS, or Btrfs.\n# Example for reformatting to exFAT (after backing up data!) sudo mkfs.exfat /dev/sdX1 ✅ b. Compress or split the file before moving: # Split the file into parts:\nsplit -b 2G as.zip as.zip.part- Then move all parts:\nmv as.zip.part-* /mnt/ To reassemble later:\ncat as.zip.part-* \u0026gt; as.zip ✅ c. Use a different destination: # Move the file to a location with an ext4, xfs, or exfat file system.\nIf you’re not sure about the filesystem or want help formatting safely, feel free to share the output of:\ndf -T /mnt ","date":"18 March 2026","externalUrl":null,"permalink":"/tutorials/split-large-file-linux-usb/","section":"Tutorials - Linux, Android \u0026 Development Guides","summary":"Guide to splitting large files into smaller chunks for FAT32 USB transfer. Uses split command to create 4GB parts and cat to rejoin them.","title":"Split Large File for FAT32 USB - Linux Guide","type":"tutorials"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/split-file/","section":"Tags","summary":"","title":"Split-File","type":"tags"},{"content":"Virtualization means creating a virtual (software-based) version of something instead of using the physical hardware directly.\nSince you\u0026rsquo;re working with Linux, Docker, and DevOps topics, this is especially important for you 👌\n🔹 1. Hardware Virtualization (Server Virtualization) # This creates Virtual Machines (VMs) that run full operating systems.\n🔸 How it works: # A hypervisor sits between hardware and operating systems.\n🔸 Types of Hypervisors: # ✅ Type 1 (Bare-metal) # Runs directly on hardware. Examples:\nVMware ESXi Microsoft Hyper-V KVM ✅ Type 2 (Hosted) # Runs on top of an existing OS. Examples:\nVirtualBox VMware Workstation 🔸 Used for: # Running multiple OS on one machine Testing Server consolidation Cloud computing 🔹 2. OS-Level Virtualization (Containers) # Instead of virtualizing hardware, this virtualizes the operating system.\nAll containers share the same kernel.\nExamples: # Docker LXC Podman 🔸 Used for: # Microservices DevOps CI/CD Lightweight app deployment 🔥 VM vs Container (Quick Comparison) # Feature VM Container Size GBs MBs Boot time Minutes Seconds OS Full OS Shared kernel Performance Heavier Lightweight Since you\u0026rsquo;re using Docker on Alpine → you\u0026rsquo;re using OS-level virtualization.\n🔹 3. Network Virtualization # Creates virtual networks inside physical networks.\nExamples: # VLAN SDN (Software Defined Networking) Virtual switches Used in:\nCloud providers Kubernetes clusters Large data centers 🔹 4. Storage Virtualization # Combines multiple physical storage devices into one virtual storage system.\nExamples: # RAID SAN LVM Used for:\nFlexible disk management Snapshots Cloud storage 🔹 5. Desktop Virtualization # Runs desktop environments on servers and accesses them remotely.\nExamples:\nVDI (Virtual Desktop Infrastructure) Remote Desktop Services Used in:\nEnterprises Schools Remote work 🔹 6. Application Virtualization # Applications run in isolated environments without full installation.\nExamples:\nSandboxing Portable apps Wine 🔥 Big Picture Diagram # Physical Hardware │ ├── Hardware Virtualization → Virtual Machines ├── OS Virtualization → Containers ├── Network Virtualization ├── Storage Virtualization ├── Desktop Virtualization └── Application Virtualization ","date":"18 March 2026","externalUrl":null,"permalink":"/blog/types-of-virtualization/","section":"Blog","summary":"Guide to virtualization types for Linux and DevOps. Covers full virtualization (QEMU), paravirtualization, hardware-assisted (KVM), containers (Docker), and more.","title":"Types of Virtualization - Complete Guide","type":"blog"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/usb/","section":"Tags","summary":"","title":"Usb","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/virtualization/","section":"Categories","summary":"","title":"Virtualization","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/virtualization/","section":"Tags","summary":"","title":"Virtualization","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/web/","section":"Tags","summary":"","title":"Web","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/web-development/","section":"Categories","summary":"","title":"Web Development","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/website/","section":"Tags","summary":"","title":"Website","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/wget/","section":"Tags","summary":"","title":"Wget","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/adb/","section":"Tags","summary":"","title":"Adb","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/adb/","section":"Categories","summary":"","title":"ADB","type":"categories"},{"content":"practical collection of advanced ADB shell commands you can use on Android devices—both unrooted and rooted—including debugging, performance tuning, package control, logs, networking, and system inspection.\nI’ll separate them clearly:\n1. Installing ADB # Download Platform-Tools:\nOfficial link: Android SDK Platform-Tools Extract the ZIP file to a folder on your computer.\nAdd ADB to your system PATH (optional but convenient):\nOn Windows: add the folder path to Environment Variables → Path. On Linux/Mac: add export PATH=$PATH:/path/to/platform-tools to your .bashrc or .zshrc. 2. Enabling Developer Options on Android # Go to Settings → About Phone → Build Number. Tap Build Number 7 times until it says \u0026ldquo;You are now a developer!\u0026rdquo; Go back to Settings → System → Developer Options. Enable USB Debugging. 3. Basic ADB Commands # After connecting your device via USB:\nCheck device connection\nadb devices This lists all connected devices. You may need to allow USB debugging on your phone when prompted.\nInstall an APK\nadb install appname.apk Uninstall an app\nadb uninstall com.example.app Copy files to/from device\nadb push localfile /sdcard/remote_file adb pull /sdcard/remote_file localfile Open a shell on the device\nadb shell Reboot the device\nadb reboot 4. Advanced Usage # Logcat (view system logs)\nadb logcat Screen recording\nadb shell screenrecord /sdcard/demo.mp4 Backup \u0026amp; restore\nadb backup -apk -all -f backup.ab adb restore backup.ab 5. Wireless ADB # Connect device via USB.\nEnable TCP/IP mode:\nadb tcpip 5555 Find your device IP:\nadb shell ip route Connect wirelessly:\nadb connect DEVICE_IP:5555 Basics (Works on All Devices) # Enter shell:\nadb shell Check device info:\ngetprop ro.product.model getprop ro.build.version.release uname -a Battery status:\ndumpsys battery Screen resolution \u0026amp; DPI:\nwm size wm density Change temporarily:\nwm size 1080x1920 wm density 420 Reset:\nwm size reset wm density reset App \u0026amp; Package Management (Unrooted) # List installed packages:\npm list packages With paths:\npm list packages -f Find a package:\npm list packages | grep youtube Disable system app for current user:\npm disable-user --user 0 com.package.name Re-enable:\npm enable com.package.name Uninstall for current user (safe debloat):\npm uninstall --user 0 com.facebook.katana Clear app data:\npm clear com.package.name Grant permission:\npm grant com.package.name android.permission.READ_LOGS Activity \u0026amp; Intent Control # Launch app:\nmonkey -p com.package.name -c android.intent.category.LAUNCHER 1 Start activity:\nam start -n com.pkg/.MainActivity Send broadcast:\nam broadcast -a android.intent.action.BOOT_COMPLETED Force-stop:\nam force-stop com.pkg Logs \u0026amp; Debugging # Live logs:\nlogcat Filter:\nlogcat ActivityManager:I *:S Save to file:\nlogcat -d \u0026gt; /sdcard/log.txt Kernel messages:\ndmesg System services:\ndumpsys activity dumpsys meminfo dumpsys cpuinfo Performance / Monitoring # Top processes:\ntop CPU governor:\ncat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor RAM info:\ncat /proc/meminfo Thermal:\ndumpsys thermalservice FPS overlay:\ndumpsys SurfaceFlinger --latency Networking # IP address:\nip addr show wlan0 Ping:\nping google.com Ports:\nnetstat -tulpn DNS:\ngetprop net.dns1 File System Access (Limited Unrooted) # Browse:\nls /sdcard Copy files:\ncp /sdcard/file.txt /sdcard/Download/ Find files:\nfind /sdcard -name \u0026#34;*.mp4\u0026#34; ROOT-ONLY ADB SHELL COMMANDS # Enter root shell:\nadb shell su System Mounting # Remount system writable:\nmount -o rw,remount / (Older):\nmount -o rw,remount /system Check mounts:\nmount | grep system Remove System App (dangerous) # rm -rf /system/app/AppName rm -rf /system/priv-app/AppName Better:\npm uninstall com.package CPU Tweaks # Set governor:\necho performance \u0026gt; /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor Disable core:\necho 0 \u0026gt; /sys/devices/system/cpu/cpu5/online Battery Calibration (legacy) # rm /data/system/batterystats.bin reboot Process Injection / Debug # List SELinux mode:\ngetenforce Switch (temporary):\nsetenforce 0 System Properties # Change property:\nsetprop debug.hwui.renderer skiagl View all:\ngetprop Wireless Debugging Tricks # ADB over Wi-Fi:\nadb tcpip 5555 adb connect 192.168.1.5 Stop:\nadb usb Screenshot / Screenrecord # Screenshot:\nadb exec-out screencap -p \u0026gt; screen.png Video:\nadb shell screenrecord /sdcard/demo.mp4 Important Warnings # Root commands can:\nSoft-brick devices Break OTA updates Trigger bootloops Always backup before modifying /system or /vendor.\n","date":"18 March 2026","externalUrl":null,"permalink":"/tutorials/adb-shell-commands-android/","section":"Tutorials - Linux, Android \u0026 Development Guides","summary":"Advanced ADB shell commands for Android devices - both rooted and unrooted. Covers debugging, performance tuning, package control, logs, networking, and system inspection.","title":"Advanced ADB Shell Commands for Android Devices","type":"tutorials"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/compositor/","section":"Tags","summary":"","title":"Compositor","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/debugging/","section":"Tags","summary":"","title":"Debugging","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/desktop/","section":"Categories","summary":"","title":"Desktop","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/development/","section":"Categories","summary":"","title":"Development","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/libvirt/","section":"Tags","summary":"","title":"Libvirt","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/picom/","section":"Tags","summary":"","title":"Picom","type":"tags"},{"content":"Here is a comprehensive list of many configuration parameters for picom (a popular X11 compositor) — note: the available parameters may differ slightly between versions/forks (for example, the official version vs forks with extra features). Use this as a reference and always check your version’s man-page or sample config. (picom.app)\nGeneral / Backend / Process behaviour # Parameter Description backend Choose rendering backend: \u0026quot;xrender\u0026quot;, \u0026quot;glx\u0026quot;, \u0026quot;xr_glx_hybrid\u0026quot; etc. (Gist) config Path to config file (when launching via CLI) (Linux Command Library) daemon Whether to fork into background after initialization (config.phundrak.com) vsync Enable VSync to reduce tearing (Gist) dbus Enable D-Bus control interface (config.phundrak.com) glx-no-stencil, glx-copy-from-front, glx-swap-method GLX-specific tuning options (Gist) Shadows # Parameter Description shadow Enable window shadows (Gist) shadow-radius Blur radius of shadows (in pixels) (Gist) shadow-opacity Opacity (0.0-1.0) of shadows (Gist) shadow-offset-x, shadow-offset-y Horizontal/vertical offsets of shadows (Gist) shadow-red, shadow-green, shadow-blue Colour channels of shadow tint (0.0-1.0) (Gist) shadow-exclude Rules to exclude certain windows from shadows (Gist) xinerama-shadow-crop Crop shadows to monitor when using Xinerama (Gist) Fading / Transitions # Parameter Description fading Enable fading of windows (on open/close or opacity change) (Gist) fade-in-step, fade-out-step Increment/decrement per step of fade (opacity change) (Gist) no-fading-openclose Disable fading on open/close events (Linux Command Library) Opacity / Dim / Inactive Windows # Parameter Description inactive-opacity Opacity for inactive windows (0.0-1.0) (Linux Command Library) active-opacity Opacity for active (focused) windows (Gist) opacity-rule Specific rules mapping windows to an opacity value (picom.app) inactive-dim Dim factor for inactive windows (makes them darker) (picom.app) Rounded Corners / Borders # Parameter Description corner-radius Radius (in pixels) for rounding window corners (freakybyte.github.io) rounded-corners-exclude Rules to exclude certain windows from having rounded corners (freakybyte.github.io) round-borders (Some forks) number of pixels for border rounding (Gist) round-borders-exclude Rules to exclude windows from border rounding (Gist) Blur / Background Blur # Parameter Description blur-background Whether to blur backgrounds of windows (semi-transparent/ARGB) (config.phundrak.com) blur-background-frame Whether to blur when the frame (decoration) is transparent/varying (config.phundrak.com) blur-background-fixed Use fixed strength blur rather than varying by opacity (config.phundrak.com) blur-method Method for blur: \u0026quot;none\u0026quot;, \u0026quot;box\u0026quot;, \u0026quot;gaussian\u0026quot;, \u0026quot;dual_kawase\u0026quot;, \u0026quot;kernel\u0026quot; etc. (picom.app) blur-size Kernel size for blur (integer, depends on method) (config.phundrak.com) blur-deviation Deviation for gaussian blur method (float) (config.phundrak.com) blur-strength Strength for dual_kawase or other blur methods (integer) (config.phundrak.com) blur-kern Explicit kernel definition for “kernel” method (string) (picom.app) blur-background-exclude Rules to prevent blur in certain windows (config.phundrak.com) Window Rules / Matching / Conditions # Parameter Description rules New-style list of rules { match = \u0026quot;...\u0026quot;; key = value; ... } to apply on windows. (picom.app) invert-color-include (Experimental) windows to invert colours (picom.app) crop-shadow-to-monitor Crop shadows for windows to monitor area via RandR (picom.app) Other Miscellaneous Parameters # Parameter Description inactive-opacity-override Override opacity setting for inactive windows even if WM hints set something else (picom.app) mark-wmwin-focused, mark-ovredir-focused Options for how to detect active/focused windows via window manager hints (picom.app) unredir-if-possible Unredirect full-screen/full-window windows for performance (depends on driver) (freakybyte.github.io) xdisplay-name, refresh-rate (deprecated) X display and refresh rate options (note: refresh-rate is deprecated) (Reddit) Example snippet of config # backend = \u0026#34;glx\u0026#34;; vsync = true; shadow = true; shadow-radius = 10; shadow-opacity = 0.25; corner-radius = 8; rounded-corners-exclude = [ \u0026#34;class_g = \u0026#39;Polybar\u0026#39;\u0026#34;, \u0026#34;name = \u0026#39;Notification\u0026#39;\u0026#34; ]; blur-method = \u0026#34;dual_kawase\u0026#34;; blur-strength = 4; blur-background = true; blur-background-exclude = [ \u0026#34;window_type = \u0026#39;dock\u0026#39;\u0026#34;, \u0026#34;_GTK_FRAME_EXTENTS@:c\u0026#34; ]; fading = true; fade-in-step = 0.08; fade-out-step = 0.08; rules = ( { match = \u0026#34;class_g = \u0026#39;Firefox\u0026#39;\u0026#34;; opacity = 0.9; }, { match = \u0026#34;name = \u0026#39;Dialog\u0026#39;\u0026#34;; shadow = false; } ); Notes \u0026amp; Caveats # Some parameters may only apply to forks of picom (e.g., ones that added rounded-corners, dual_kawase blur, etc). Always check version / manpages. Some features (especially blur, rounded corners) may cause performance issues depending on GPU/driver. Users on Reddit report slowdowns. (Reddit) If you mis-configure the config file (syntax errors, unsupported options) picom might fail to start or silently disable features. There’s overlap/legacy options: older “inactive-opacity / active-opacity” vs new “rules” based approach — mixing both may produce unexpected results. (picom.app) If you rely on a nested window manager (like i3, dwm etc) and especially tiling, ensure that your settings (unredir-if-possible, vsync, backend) match your GPU/driver setup. If you like, I can send you a full commented picom.conf template (one with all major parameters commented out + explanations) tailored for use with dwm/tiling WM, so you can pick what you like. Would you like that?\n","date":"18 March 2026","externalUrl":null,"permalink":"/tutorials/picom-configuration/","section":"Tutorials - Linux, Android \u0026 Development Guides","summary":"Comprehensive reference for picom (X11 compositor) configuration. Covers general settings, backend options, transparency, blur, and animations.","title":"Picom Configuration Guide - X11 Compositor","type":"tutorials"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/qemu/","section":"Tags","summary":"","title":"Qemu","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/root/","section":"Tags","summary":"","title":"Root","type":"tags"},{"content":"Setting up virtualization in Void Linux using KVM + QEMU + libvirt is totally doable and provides a solid lightweight hypervisor environment.\n1. PrerDresden # Check for hardware virtualization support # egrep -c \u0026#39;(vmx|svm)\u0026#39; /proc/cpuinfo Output should be 1 or more. If 0, your CPU doesn’t support virtualization (or it\u0026rsquo;s disabled in BIOS). Enable virtualization in BIOS/UEFI # Look for settings like Intel VT-x or AMD-V and enable them. 2. Install Packages # Void Linux uses xbps, so:\nsudo xbps-install -S qemu libvirt virt-manager sudo xbps-install -S bridge-utils ebtables dnsmasq You can also install optional UIs:\nvirt-manager — GUI for managing VMs virt-viewer — lightweight viewer qemu-ui-gtk or qemu-ui-sdl if you\u0026rsquo;re planning to use QEMU\u0026rsquo;s graphical window directly. 3. Enable and Start libvirtd # Void uses runit, so enable the service:\nsudo ln -s /etc/sv/libvirtd /var/service/ Check if it\u0026rsquo;s running:\nsudo sv status libvirtd 4. Add Yourself to Groups # To avoid needing sudo every time:\nsudo usermod -aG libvirt,input,kvm $(whoami) Then log out and back in (or newgrp libvirt).\n5. Networking Setup # Libvirt usually creates a NAT bridge called virbr0. Check:\nip a | grep virbr0 If not present, restart the service and check again:\nsudo sv restart libvirtd 6. Create and Run a VM # Option 1: Using virt-manager (GUI) # virt-manager Choose \u0026ldquo;New VM\u0026rdquo;, follow the wizard to select an ISO, allocate memory/disk, etc. Option 2: Using virt-install (CLI) # Example:\nvirt-install \\ --name test-vm \\ --memory 2048 \\ --vcpus 2 \\ --disk size=10 \\ --cdrom /path/to/iso \\ --os-type linux \\ --os-variant ubuntu20.04 \\ --network network=default \\ --graphics spice 7. Optional: Autostart VMs # To make a VM auto-start on boot:\nvirsh autostart test-vm Test KVM Acceleration # You can verify KVM is used:\nvirsh capabilities | grep -i kvm Or for QEMU:\nqemu-system-x86_64 -accel help Common Tips # If you get errors about /dev/kvm permissions, check:\nls -l /dev/kvm Ensure it\u0026rsquo;s accessible by kvm group.\nTo list VMs:\nvirsh list --all Example: qemu.sh # #!/bin/bash # Configuration ISO_PATH=\u0026#34;$1\u0026#34; # ISO passed as first argument DISK_IMAGE=\u0026#34;disk.qcow2\u0026#34; # Disk image file DISK_SIZE=\u0026#34;10G\u0026#34; # Disk size if created RAM=\u0026#34;2048\u0026#34; # Memory in MB CPUS=\u0026#34;2\u0026#34; # Number of CPU cores VM_NAME=\u0026#34;qemu-vm\u0026#34; # VM name UEFI_FIRMWARE=\u0026#34;/usr/share/edk2/x64/OVMF_CODE.fd\u0026#34; # Optional: for UEFI # Check for ISO argument if [ -z \u0026#34;$ISO_PATH\u0026#34; ]; then echo \u0026#34;Usage: $0 path_to_iso.iso\u0026#34; exit 1 fi # Create disk if not exists if [ ! -f \u0026#34;$DISK_IMAGE\u0026#34; ]; then echo \u0026#34;Creating disk image...\u0026#34; qemu-img create -f qcow2 \u0026#34;$DISK_IMAGE\u0026#34; \u0026#34;$DISK_SIZE\u0026#34; fi # Run VM qemu-system-x86_64 \\ -enable-kvm \\ -m \u0026#34;$RAM\u0026#34; \\ -smp cpus=\u0026#34;$CPUS\u0026#34; \\ -cpu host \\ -name \u0026#34;$VM_NAME\u0026#34; \\ -drive file=\u0026#34;$DISK_IMAGE\u0026#34;,format=qcow2 \\ -cdrom \u0026#34;$ISO_PATH\u0026#34; \\ -boot d \\ -vga virtio \\ -display gtk \\ -soundhw hda \\ -net nic -net user \\ -machine type=q35,accel=kvm \\ -rtc clock=host \\ -usb -device usb-tablet Instructions # Save this script as qemu.sh Make it executable: chmod +x qemu.sh Run it with an ISO: ./qemu.sh ~/Downloads/debian.iso ","date":"18 March 2026","externalUrl":null,"permalink":"/tutorials/kvm-qemu-libvirt-void-linux/","section":"Tutorials - Linux, Android \u0026 Development Guides","summary":"Complete guide to setting up KVM + QEMU + libvirt on Void Linux. Covers hardware virtualization check, package installation, libvirt configuration, and VM management.","title":"Setup KVM + QEMU + libvirt on Void Linux","type":"tutorials"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/shell/","section":"Tags","summary":"","title":"Shell","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/transparency/","section":"Tags","summary":"","title":"Transparency","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/void-linux/","section":"Categories","summary":"","title":"Void Linux","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/window-manager/","section":"Tags","summary":"","title":"Window-Manager","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/x11/","section":"Categories","summary":"","title":"X11","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/x11/","section":"Tags","summary":"","title":"X11","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/file-transfer/","section":"Categories","summary":"","title":"File Transfer","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/file-transfer/","section":"Tags","summary":"","title":"File-Transfer","type":"tags"},{"content":"That error simply means the mount point (~/Phone) doesn’t exist yet — you just need to create that folder before mounting.\nHere’s how to fix it step-by-step 👇\n# 1. Create a folder to mount the phone mkdir -p ~/Phone # 2. Mount the phone again jmtpfs ~/Phone ✅ If successful, your phone’s internal storage will now appear inside ~/Phone.\nTo verify:\nls ~/Phone You should see folders like DCIM, Pictures, Downloads, etc.\n📤 When you’re done # Always unmount properly before unplugging:\nfusermount -u ~/Phone ","date":"18 March 2026","externalUrl":null,"permalink":"/tutorials/mount-android-phone-linux/","section":"Tutorials - Linux, Android \u0026 Development Guides","summary":"Guide to mounting Android phone on Linux for file transfer. Covers MTP protocol, USB debugging mode, and troubleshooting mount point errors.","title":"Mount Android Phone on Linux - File Transfer Guide","type":"tutorials"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/mtp/","section":"Tags","summary":"","title":"Mtp","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/usb-debugging/","section":"Tags","summary":"","title":"Usb-Debugging","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/-compositor/","section":"Tags","summary":"","title":" Compositor","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/32-bit/","section":"Tags","summary":"","title":"32-Bit","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/ad-blocker/","section":"Tags","summary":"","title":"Ad-Blocker","type":"tags"},{"content":"Here are advanced tips for using the terminal efficiently on Linux or Unix-based systems. These will help you boost productivity, automate tasks, and navigate like a power user:\n🔥 Advanced Terminal Tips \u0026amp; Tricks # 🧠 1. Master Bash Shortcuts # Shortcut Action Ctrl + A Move to beginning of line Ctrl + E Move to end of line Ctrl + U Delete from cursor to start Ctrl + K Delete from cursor to end Ctrl + R Search command history interactively !! Run the last command again !sudo !! Run last command with sudo 🧾 2. Use Aliases to Save Time # Define shortcuts in ~/.bashrc or ~/.zshrc:\nalias gs=\u0026#39;git status\u0026#39; alias ll=\u0026#39;ls -lah --color=auto\u0026#39; alias c=\u0026#39;clear\u0026#39; alias ..=\u0026#39;cd ..\u0026#39; Then reload with source ~/.bashrc.\n🧰 3. Use Functions for Complex Tasks # Example: extract any archive format\nextract() { if [ -f \u0026#34;$1\u0026#34; ]; then case \u0026#34;$1\u0026#34; in *.tar.bz2) tar xjf \u0026#34;$1\u0026#34; ;; *.tar.gz) tar xzf \u0026#34;$1\u0026#34; ;; *.zip) unzip \u0026#34;$1\u0026#34; ;; *.rar) unrar x \u0026#34;$1\u0026#34; ;; *) echo \u0026#34;Unknown format\u0026#34; ;; esac else echo \u0026#34;\u0026#39;$1\u0026#39; is not a valid file\u0026#34; fi } ⌛ 4. Use tmux or screen for Terminal Sessions # Run long processes without worrying about disconnection\nSplit terminal windows\nReattach sessions later:\ntmux tmux attach 🔍 5. Search \u0026amp; Reuse Commands # history | grep ssh Or use reverse search with Ctrl + R, then type a keyword.\n📁 6. Jump to Directories Quickly # Use autojump:\nj projects It learns your habits and allows you to jump to frequently visited folders.\n🧪 7. Use Process Substitution # Compare output of two commands:\ndiff \u0026lt;(ls /etc) \u0026lt;(ls /usr/etc) 📋 8. Copy Output to Clipboard # Depends on system:\nls | xclip -selection clipboard # Linux (X11) ls | pbcopy # macOS ⚙️ 9. Use xargs Like a Pro # Example: delete all .bak files\nfind . -name \u0026#34;*.bak\u0026#34; | xargs rm Or parallel execution:\ncat urls.txt | xargs -n 1 -P 10 curl -O 🐚 10. Customize Your Prompt (PS1) # Example:\nexport PS1=\u0026#34;\\[\\e[32m\\]\\u@\\h:\\w \\$\\[\\e[0m\\] \u0026#34; Try Starship Prompt for a powerful, cross-shell prompt.\n📡 11. Run Commands Over SSH Easily # ssh user@host \u0026#39;df -h\u0026#39; 📜 12. Use tee to View and Save Output # ls -l | tee output.txt 🔄 13. Loop Through Commands # Example: batch rename\nfor f in *.JPG; do mv \u0026#34;$f\u0026#34; \u0026#34;${f%.JPG}.jpg\u0026#34;; done 🧮 14. Use Arithmetic # echo $(( 10 + 5 )) ⏱️ 15. Time Commands # time tar czf archive.tar.gz folder/ 🧑‍💻 Bonus Tools # fzf — Fuzzy finder for files and history bat — Better cat with syntax highlighting htop — Better top ncdu — Disk usage analyzer ripgrep (rg) — Fast recursive grep exa — Modern replacement for ls ","date":"18 March 2026","externalUrl":null,"permalink":"/linux/advanced-terminal-tips-linux/","section":"Linux Knowledge Base","summary":"Advanced terminal tips for Linux power users. Learn bash shortcuts, aliases, functions, tmux, screen, autojump, and essential tools for productivity.","title":"Advanced Terminal Tips and Tricks for Linux","type":"linux"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/alpine-linux/","section":"Categories","summary":"","title":"Alpine Linux","type":"categories"},{"content":"Here’s a step-by-step learning plan to become an Alpine Linux specialist, structured over 6 weeks with clear goals, resources, and projects.\n📚 Alpine Linux Specialist Learning Plan (6 Weeks) # ✅ Week 1: Foundations # Goals:\nInstall Alpine manually (ISO or netboot) Learn basic usage and filesystem structure Topics:\nsetup-alpine, partitioning, network Modes: sys, data, diskless File hierarchy: /etc, /var, /etc/apk, /etc/lbu Practice:\nInstall Alpine in a VM or on bare metal Reboot and verify persistence Try lbu commit and lbu include Resources:\nOfficial Alpine Setup Guide man setup-alpine ✅ Week 2: APK \u0026amp; Package Management # Goals:\nMaster package management with apk Explore repositories and custom packages Topics:\napk add, del, info, search Pinning packages Enable community/testing repos Practice:\nCreate an install script to automate:\napk update \u0026amp;\u0026amp; apk add nano openssh htop curl Resources:\napk Tools Wiki man apk ✅ Week 3: Networking, Services, and OpenRC # Goals:\nConfigure static IP, DNS, and services Master OpenRC (Alpine’s init system) Topics:\nrc-update, rc-service /etc/network/interfaces, /etc/resolv.conf SSH, NTP, chronyd Practice:\nSet up SSH and configure OpenRC:\nrc-update add sshd rc-service sshd start Resources:\nOpenRC Guide ✅ Week 4: Diskless Mode and LBU # Goals:\nRun Alpine in diskless mode Save changes using lbu Topics:\n/media, modloop, /etc/lbu lbu commit, lbu include, lbu exclude overlayfs Practice:\nBoot Alpine from USB in diskless mode Install tools, save config with LBU Resources:\nAlpine Diskless Guide ✅ Week 5: Alpine in Docker \u0026amp; Scripting # Goals:\nUse Alpine as a base image in Docker Automate with shell scripts Topics:\nDockerfile, ENTRYPOINT, CMD sh, ash, POSIX scripting Practice:\nBuild a minimal image:\nFROM alpine RUN apk add --no-cache curl bash CMD [\u0026#34;bash\u0026#34;] Resources:\nDocker with Alpine Advanced Alpine Images ✅ Week 6: Custom Initramfs, PXE Boot, and Package Building # Goals:\nBuild a custom ISO or PXE bootable system Learn abuild to make packages Topics:\nmkimage.sh, mkinitfs abuild, APKBUILD, alpine-sdk Hosting a local repository Practice:\nCreate your own Alpine package (hello-world shell script) Host it on a simple HTTP server PXE boot Alpine via TFTP + DHCP Resources:\nAPKBUILD guide mkimage.sh 🔧 Bonus Projects # 🧱 Build your own hardened Alpine-based router 🐳 Publish an Alpine-based Docker image 📦 Maintain a mirror of Alpine packages 🧰 Build a minimalist DevOps toolkit using Alpine ","date":"18 March 2026","externalUrl":null,"permalink":"/linux/alpine-linux-learning-plan/","section":"Linux Knowledge Base","summary":"A structured 6-week learning plan to become an Alpine Linux specialist. Covers installation, APK, networking, diskless mode, Docker, and advanced topics.","title":"Alpine Linux Learning Plan - 6 Week Mastery Guide","type":"linux"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/alpine-linux/","section":"Tags","summary":"","title":"Alpine-Linux","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/alsa/","section":"Tags","summary":"","title":"Alsa","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/apk/","section":"Tags","summary":"","title":"Apk","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/bash/","section":"Tags","summary":"","title":"Bash","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/best-practices/","section":"Categories","summary":"","title":"Best Practices","type":"categories"},{"content":"To build the minimum Linux distro, you only need a few essential components. Everything else is optional.\nHere are the absolute minimum requirements for a functional Linux system:\n✅ Minimum Things Needed for a Linux Distro # 1. Linux Kernel # The core of the system. Manages hardware, memory, processes. 2. Init System (at least one) # Something to start the system after the kernel loads. Examples:\ninit (BusyBox init) systemd runit openrc s6 For minimal distros → BusyBox init is the lightest.\n3. C Library # Programs need this to run. Examples:\nmusl (light, used by Alpine) glibc (standard, heavier) uClibc (for embedded) 4. Shell # To run commands. Examples:\nBusyBox ash (minimal) bash dash zsh 5. Basic Userland Tools # Minimum tools for filesystem, networking, etc. Most minimal distros use:\nBusyBox → combines ls, cp, mv, sh, cat, mkdir, etc. in one binary. 6. Bootloader # To start the kernel. Examples:\nGRUB syslinux EFI stub loader (for UEFI minimal system) 7. Minimal Filesystem Structure # A basic Linux directory tree:\n/ ├── bin ├── sbin ├── etc ├── usr ├── lib ├── dev ├── proc ├── sys └── tmp 8. Device Management # For minimal → mdev (BusyBox) Standard systems → udev 9. Optional: Package Manager # Not required, but useful. Examples:\napk (Alpine) pacman (Arch) apt (Debian) xbps (Void) You can even run a Linux system without a package manager (just static binaries).\n🔽 Super Minimal Setup Example (BusyBox + Kernel) # A distro can boot with only:\n✔ Linux kernel ✔ BusyBox (includes shell + tools + init) ✔ A few config files ✔ Minimal filesystem\nThis can fit in 5–8 MB total.\n🧩 If you want a minimal Linux for an E-book reader (from your previous message)** # You would need:\nRequired # Kernel Init system BusyBox or minimal tools DRM/E-ink display drivers Framebuffer or Wayland compositor Lightweight window manager eBook reader app (ePub/PDF) Optional # Wi-Fi tools Dictionary File browser ","date":"18 March 2026","externalUrl":null,"permalink":"/linux/build-minimal-linux-distro/","section":"Linux Knowledge Base","summary":"Complete guide to building a minimal Linux distro. Covers essential components: kernel, init (BusyBox/systemd/runit), C library, shell, and filesystem.","title":"Build Minimal Linux Distro - Complete Guide","type":"linux"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/busybox/","section":"Tags","summary":"","title":"Busybox","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/cache/","section":"Tags","summary":"","title":"Cache","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/cdrom/","section":"Tags","summary":"","title":"Cdrom","type":"tags"},{"content":"On Void Linux, XBPS keeps downloaded packages in a cache directory. You can clean it safely like this:\n✅ Remove all cached packages # Run as root:\nsudo xbps-remove -O This is the recommended way—it deletes old cached packages in:\n/var/cache/xbps/ 🧹 Remove only obsolete packages (not installed anymore) # sudo xbps-remove -o 📦 Clean manually (optional) # If you want to delete everything in the cache:\nsudo rm -rf /var/cache/xbps/* ⚠️ This is safe, but xbps-remove -O is cleaner because it understands the package database.\n🔍 Check cache size before cleaning # du -sh /var/cache/xbps ","date":"18 March 2026","externalUrl":null,"permalink":"/tutorials/xbps-clean-cache-void-linux/","section":"Tutorials - Linux, Android \u0026 Development Guides","summary":"Guide to cleaning Void Linux package cache using xbps-remove commands. Covers removing all cached packages, obsolete packages, and manual cleanup.","title":"Clean XBPS Cache on Void Linux - Free Disk Space","type":"tutorials"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/commands/","section":"Categories","summary":"","title":"Commands","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/commands/","section":"Tags","summary":"","title":"Commands","type":"tags"},{"content":"common Linux security mistakes that users and administrators often make:\n1. Running as Root Unnecessarily # Using the root account for daily tasks increases the risk of accidental system damage and exposure to malware. Solution: Use sudo instead of logging in as root. 2. Weak or Default Passwords # Using weak passwords or keeping default ones makes brute-force attacks easy. Solution: Use strong passwords and enable multi-factor authentication (MFA) where possible. 3. Ignoring System Updates # Not updating your system leaves it vulnerable to known exploits. Solution: Regularly update using apt update \u0026amp;\u0026amp; apt upgrade (Debian-based) or dnf upgrade (RHEL-based). 4. Exposing SSH to the Internet Without Protection # Default SSH settings (port 22, password authentication) are an easy target for attackers. Solution: Change the default SSH port (/etc/ssh/sshd_config). Disable password authentication and use SSH keys. Use Fail2Ban to block brute-force attempts. Restrict access with AllowUsers or AllowGroups. 5. Running Unnecessary Services # Extra services increase the attack surface. Solution: Use systemctl disable \u0026lt;service\u0026gt; to disable unneeded services. 6. Misconfigured Firewall # Running a system without firewall rules leaves it exposed. Solution: Use UFW (ufw enable for Ubuntu) or firewalld (RHEL-based). Only allow required ports (ufw allow 22/tcp for SSH). 7. Lack of File and Directory Permissions # Granting excessive permissions (chmod 777) to files and folders is a serious risk. Solution: Use the principle of least privilege (chmod 750 for directories, chmod 640 for files). 8. Not Monitoring Logs # Ignoring logs means missing early signs of attacks. Solution: Regularly check /var/log/auth.log, /var/log/syslog, and /var/log/secure. Use Logwatch or journalctl for monitoring. 9. Using Outdated Software and Repositories # Older software may have security flaws. Solution: Use apt update, dnf upgrade, and avoid untrusted PPAs. 10. No Backups or Poor Backup Security # Not having backups makes recovery impossible after a breach. Solution: Automate backups with rsync, BorgBackup, or Restic. Store backups offsite and encrypt them. ","date":"18 March 2026","externalUrl":null,"permalink":"/tutorials/common-linux-security-mistakes/","section":"Tutorials - Linux, Android \u0026 Development Guides","summary":"Guide to common Linux security mistakes and their fixes. Covers running as root, weak passwords, missing firewalls, unpatched systems, and proper security practices.","title":"Common Linux Security Mistakes and How to Fix Them","type":"tutorials"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/concepts/","section":"Categories","summary":"","title":"Concepts","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/cups/","section":"Tags","summary":"","title":"Cups","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/custom-distro/","section":"Tags","summary":"","title":"Custom-Distro","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/desktop/","section":"Tags","summary":"","title":"Desktop","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/dns/","section":"Tags","summary":"","title":"Dns","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/embedded-linux/","section":"Tags","summary":"","title":"Embedded-Linux","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/emulation/","section":"Tags","summary":"","title":"Emulation","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/firewall/","section":"Tags","summary":"","title":"Firewall","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/hardening/","section":"Tags","summary":"","title":"Hardening","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/hardware/","section":"Categories","summary":"","title":"Hardware","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/hardware/","section":"Tags","summary":"","title":"Hardware","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/how-to/","section":"Categories","summary":"","title":"How-To","type":"categories"},{"content":"On Void Linux, you can install and set up CUPS as follows:\n🛠️ Step 1: Install CUPS # sudo xbps-install -S cups If you need a GUI printer management tool (like for XFCE, GNOME, etc.), you can also install:\n# Optional: CUPS GUI tools sudo xbps-install -S system-config-printer 🔧 Step 2: Enable and Start the CUPS service # Void Linux uses runit, not systemd.\nsudo ln -s /etc/sv/cupsd /var/service To verify it\u0026rsquo;s running:\nsv status cupsd 🌐 Step 3: Access the CUPS Web Interface # Open your browser and go to:\nhttp://localhost:631 👤 Step 4: Add your user to the lpadmin group # sudo usermod -aG lpadmin $USER Then log out and back in for the changes to take effect.\n","date":"18 March 2026","externalUrl":null,"permalink":"/linux/install-cups-void-linux/","section":"Linux Knowledge Base","summary":"Complete guide to installing CUPS on Void Linux. Covers installation via XBPS, runit service configuration, web interface access, and printer management.","title":"Install CUPS on Void Linux - Printer Setup Guide","type":"linux"},{"content":"Running Pi-hole on Alpine Linux is a bit different from other distributions, as Alpine is designed to be lightweight and uses apk for package management. Here’s how to set up Pi-hole on a 32-bit PC running Alpine Linux:\nPrerequisites # Hardware: A 32-bit PC. Operating System: Alpine Linux installed. Network Connection: Ensure your PC is connected to your network. Step 1: Install Alpine Linux # Download Alpine Linux: Get the latest 32-bit version from the Alpine Linux website. Create a Bootable USB: Use tools like Rufus or Etcher to create a bootable USB drive with the downloaded ISO. Install Alpine Linux: Boot from the USB and follow the installation instructions to set up Alpine Linux. Step 2: Update Your System # Once Alpine Linux is installed, log in and update the package index:\nsudo apk update Step 3: Install Required Packages # You will need to install some dependencies for Pi-hole. Run the following command:\nsudo apk add git curl bash Step 4: Install Pi-hole # Clone the Pi-hole Repository: Use Git to clone the Pi-hole repository:\ngit clone --depth 1 https://github.com/pi-hole/pi-hole.git /opt/pihole Navigate to the Pi-hole Directory:\ncd /opt/pihole Run the Installer: Start the installation script:\nsudo bash install.sh Follow the Installation Prompts: The installer will guide you through the setup process. You will need to configure:\nStatic IP address for your Pi-hole. DNS provider (you can choose from the list provided). Privacy settings. Any additional features you want to enable. Step 5: Configure Your Router # To ensure that all devices on your network use Pi-hole for DNS resolution, you need to configure your router:\nAccess Router Settings: Log in to your router\u0026rsquo;s web interface (usually at 192.168.1.1 or 192.168.0.1). Change DNS Settings: Look for the DNS settings and set the primary DNS to the static IP address of your Pi-hole. Save Changes: Save the settings and restart your router if necessary. Step 6: Access the Pi-hole Admin Interface # Open a Web Browser: On any device connected to your network, open a web browser. Go to Pi-hole Admin Page: Enter http://\u0026lt;your-pi-hole-ip\u0026gt;/admin (replace \u0026lt;your-pi-hole-ip\u0026gt; with the static IP you assigned to your Pi-hole). Log In: Use the password provided during installation to log in. Step 7: Monitor and Maintain # Regularly check the Pi-hole admin interface for statistics and logs. Update Pi-hole and your system periodically to ensure security and performance. Troubleshooting # If you encounter issues:\nCheck your network settings and ensure the static IP is correctly configured. Verify that your router is pointing to the correct DNS. Consult the Pi-hole documentation and community forums for additional support. Note # Keep in mind that Pi-hole is primarily designed to run on Debian-based systems, and while it can be installed on Alpine, you may encounter some compatibility issues or require additional configuration. Always refer to the official Pi-hole documentation for the most accurate and detailed instructions.\n","date":"18 March 2026","externalUrl":null,"permalink":"/linux/pihole-alpine-linux/","section":"Linux Knowledge Base","summary":"Guide to installing Pi-hole on Alpine Linux. Covers dependencies, installation, router DNS configuration, and admin interface access.","title":"Install Pi-hole on Alpine Linux - Complete Guide","type":"linux"},{"content":"Here is a clean, simple guide to install and run Sway on Void Linux, including Wayland utilities, login setup, and common fixes.\n✅ Install Sway on Void Linux # 1️⃣ Install Sway and essential tools # sudo xbps-install -S sway swaybg swayidle swaylock \\ waybar foot wl-clipboard grim slurp bemenu-wayland \\ kanshi mako Optional but useful: # sudo xbps-install -S network-manager-applet \\ brightnessctl alsa-utils seatd ✅ Enable seatd (needed for input devices) # Void uses seatd, not elogind by default.\nEnable \u0026amp; start seatd: # sudo ln -s /etc/sv/seatd /var/service/ sudo sv up seatd Allow your user to use seatd:\nsudo usermod -aG seatd $USER Then log out and log back in.\n✅ Start Sway # Start directly from TTY: # sway If you get:\npermission denied: /dev/dri/card0 → You must be in the video group:\nsudo usermod -aG video $USER ✅ Autostart Sway with greetd (recommended) # Void does not ship a Wayland display manager by default.\nInstall greetd + tuigreet: # sudo xbps-install -S greetd greetd-tuigreet Create config: # sudo nano /etc/greetd/config.toml Put this:\n[terminal] vt = 1 [default_session] command = \u0026#34;tuigreet --time --cmd sway\u0026#34; user = \u0026#34;your_username\u0026#34; Enable greetd:\nsudo ln -s /etc/sv/greetd /var/service/ ✅ Basic Sway Config (~/.config/sway/config) # If you want a minimal config:\nmkdir -p ~/.config/sway nano ~/.config/sway/config Paste:\nset $mod Mod4 # Terminal bindsym $mod+Return exec foot # Exit bindsym $mod+Shift+e exec \u0026#34;swaymsg exit\u0026#34; # Reload config bindsym $mod+Shift+c reload # Kill focused window bindsym $mod+Shift+q kill # Run launcher bindsym $mod+d exec bemenu-run # Lock screen bindsym $mod+Shift+l exec swaylock ✅ Waybar (panel) # Create config:\nmkdir -p ~/.config/waybar cp /etc/xdg/waybar/config ~/.config/waybar/ cp /etc/xdg/waybar/style.css ~/.config/waybar/ Start automatically by adding into sway config:\nexec waybar 🔧 Common problems \u0026amp; fixes # ❌ Sway crashes / black screen # Install correct video driver:\nIntel:\nsudo xbps-install -S mesa-intel-dri AMD GPU:\nsudo xbps-install -S mesa-amdgpu-dri Nvidia (only nouveau works on Wayland):\nsudo xbps-install -S mesa-dri ❌ Clipboard not working # Install:\nsudo xbps-install -S wl-clipboard Copy:\nwl-copy Paste:\nwl-paste ❌ No sound # sudo xbps-install -S alsa-utils alsamixer ","date":"18 March 2026","externalUrl":null,"permalink":"/linux/install-sway-void-linux/","section":"Linux Knowledge Base","summary":"Step-by-step guide to install Sway on Void Linux. Includes seatd setup, greetd display manager, waybar configuration, and troubleshooting.","title":"Install Sway on Void Linux - Complete Guide","type":"linux"},{"content":"On Void Linux, Wayland itself is just a display protocol — you don’t \u0026ldquo;run\u0026rdquo; Wayland directly. Instead, you install a Wayland compositor (like sway, labwc, or wayfire) that provides the Wayland display server functionality.\nHere’s a clean step-by-step to get Wayland working on Void Linux.\n1. Update your system # sudo xbps-install -Syu 2. Install required Wayland packages # These are the general Wayland libraries and tools:\nsudo xbps-install -S wayland wayland-protocols wlroots seatd xorg-server-xwayland wayland – core Wayland libraries wayland-protocols – extra protocol extensions wlroots – backend library for many compositors seatd – seat management daemon (needed for input devices) xorg-server-xwayland – XWayland support for running X11 apps under Wayland 3. Pick and install a Wayland compositor # For example, Sway (a tiling WM like i3 but for Wayland):\nsudo xbps-install -S sway Other options:\nsudo xbps-install -S labwc # lightweight Openbox-style compositor sudo xbps-install -S wayfire # 3D compositor like Compiz 4. Enable seatd for input device access # sudo ln -s /etc/sv/seatd /var/service/ sudo usermod -aG video,input yourusername Log out and back in so your group changes take effect.\n5. Start your Wayland session # From a TTY (not inside X11), log in and run:\nsway If you’re using labwc or wayfire, replace sway with the compositor name.\n6. (Optional) Set up a display manager with Wayland # If you want graphical login:\ngreetd (lightweight Wayland login manager) sudo xbps-install -S greetd greetd-gtkgreet sudo ln -s /etc/sv/greetd /var/service/ Edit /etc/greetd/config.toml to run your compositor after login.\n7. (Optional) Wayland utilities # sudo xbps-install -S wofi grim slurp wl-clipboard wofi – application launcher grim + slurp – screenshots wl-clipboard – clipboard tools for Wayland ","date":"18 March 2026","externalUrl":null,"permalink":"/tutorials/install-wayland-void-linux/","section":"Tutorials - Linux, Android \u0026 Development Guides","summary":"Complete guide to installing Wayland compositors on Void Linux. Covers Sway, labwc, wayfire, seatd, and display manager setup.","title":"Install Wayland Compositors on Void Linux","type":"tutorials"},{"content":"Here are all common ways to install and run XFCE on Void Linux, depending on whether you want a full desktop environment, a minimal setup, or to start it manually.\n⭐ 1. Install the Full XFCE Desktop Meta-Package # This is the easiest method.\nsudo xbps-install -S xfce4 sudo xbps-install -S lightdm lightdm-gtk3-greeter sudo ln -s /etc/sv/lightdm /var/service/ reboot What this gives you: ✓ All XFCE core components ✓ LightDM display manager ✓ XFCE session starts automatically at login\n⭐ 2. Install a Minimal XFCE Session (no meta-package) # If you want only the essential parts of XFCE:\nsudo xbps-install -S xfce4-session xfce4-panel xfce4-settings xfwm4 xfdesktop xfce4-terminal thunar Start manually (no display manager):\necho \u0026#34;exec startxfce4\u0026#34; \u0026gt; ~/.xinitrc startx What this gives you: ✓ Minimal XFCE (panel, WM, settings, terminal, Thunar) ✓ No login manager\n⭐ 3. Start XFCE via a Display Manager (DM) # Using LightDM # sudo xbps-install -S lightdm lightdm-gtk3-greeter sudo ln -s /etc/sv/lightdm /var/service/ Using SDDM # sudo xbps-install -S sddm sudo ln -s /etc/sv/sddm /var/service/ XFCE will appear in the session selector.\n⭐ 4. Start XFCE without a DM (using startx) # Useful for minimal/WM-style setups.\nInstall XFCE (minimal or full), then:\necho \u0026#34;exec startxfce4\u0026#34; \u0026gt; ~/.xinitrc startx ⭐ 5. Run XFCE Inside Wayland (Experimental) # XFCE is still primarily X11-based, but you can run it under XWayland inside a Wayland compositor like Sway or labwc.\nExample with Sway:\nsudo xbps-install -S sway xwayland xfce4-panel xfce4-terminal thunar Start Sway:\nsway Then run XFCE components manually (hybrid setup):\nxfwm4 --replace xfce4-panel \u0026amp; ⭐ 6. Run XFCE in a Headless/Remote Session # Using Xvnc (for VNC desktop) # sudo xbps-install -S tigervnc xfce4 ~/.vnc/xstartup:\n#!/bin/sh exec startxfce4 Start server:\nvncserver ⭐ 7. Run XFCE in a Container (chroot/LXC/Docker) # Example with Docker:\ndocker run -it --rm voidlinux/voidlinux bash xbps-install -S xfce4 tigervnc startxfce4 Useful for sandboxing or remote desktop.\n⭐ Summary of All Methods # Method Description 1. Meta-package (xfce4) Easiest full desktop 2. Minimal components Lightweight, manual control 3. Display manager (LightDM/SDDM) GUI login 4. startx (.xinitrc) No display manager 5. Wayland (experimental, XWayland) Hybrid with Sway/labwc 6. VNC (headless) Remote desktop XFCE 7. Containers Run XFCE in Docker/chroot ","date":"18 March 2026","externalUrl":null,"permalink":"/linux/install-xfce-void-linux/","section":"Linux Knowledge Base","summary":"Comprehensive guide to installing XFCE on Void Linux. Covers meta-package, minimal components, display managers, startx, XWayland, VNC, and Docker methods.","title":"Install XFCE on Void Linux - All Methods Guide","type":"linux"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/installed/","section":"Tags","summary":"","title":"Installed","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/iptables/","section":"Tags","summary":"","title":"Iptables","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/iso/","section":"Tags","summary":"","title":"Iso","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/kernel/","section":"Categories","summary":"","title":"Kernel","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/known-hosts/","section":"Tags","summary":"","title":"Known-Hosts","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/learning/","section":"Categories","summary":"","title":"Learning","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/learning/","section":"Tags","summary":"","title":"Learning","type":"tags"},{"content":" Iptables Explanation # What is iptables? # Iptables is a user-space utility program that allows system administrators to configure the IP packet filter rules of the Linux kernel firewall. It serves as the front-end to the netfilter framework, which provides packet filtering, network address translation (NAT), and other packet mangling functions.\nKey Concepts # Tables # Iptables uses different tables to organize rules based on their purpose:\nfilter table - Default table for packet filtering (INPUT, OUTPUT, FORWARD chains) nat table - Used for network address translation (PREROUTING, POSTROUTING, OUTPUT chains) mangle table - For specialized packet alteration (all chains) raw table - For connection tracking exceptions (PREROUTING, OUTPUT chains) security table - For mandatory access control (MAC) rules (all chains) Chains # Each table contains chains which are points where rules are applied:\nINPUT - Incoming traffic to the local system OUTPUT - Outgoing traffic from the local system FORWARD - Traffic routed through the system PREROUTING - Packets as they arrive (before routing decision) POSTROUTING - Packets before they leave (after routing decision) Rules # Rules define what to do with packets matching certain criteria. Each rule consists of:\nMatching criteria (source/destination IP, port, protocol, etc.) Target (what to do with matching packets) Targets # Common targets (actions) include:\nACCEPT - Allow the packet DROP - Silently discard the packet REJECT - Discard and send error response LOG - Log the packet and continue processing SNAT/DNAT - Source/Destination NAT MASQUERADE - Special case of SNAT for dynamic IPs Common Commands # Basic Operations # # List all rules iptables -L -n -v # List rules for specific table iptables -t nat -L -n -v # Flush all rules (delete all) iptables -F # Set default policy (DROP/ACCEPT) iptables -P INPUT DROP Rule Management # # Append rule to chain iptables -A INPUT -p tcp --dport 22 -j ACCEPT # Insert rule at specific position iptables -I INPUT 3 -p tcp --dport 80 -j ACCEPT # Delete rule by number iptables -D INPUT 2 # Delete all rules in chain iptables -F INPUT Saving and Restoring # # Save rules (varies by distro) iptables-save \u0026gt; /etc/iptables.rules # Restore rules iptables-restore \u0026lt; /etc/iptables.rules Example Rules # Basic Firewall # # Set default policies iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT # Allow loopback iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # Allow established connections iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Allow SSH iptables -A INPUT -p tcp --dport 22 -j ACCEPT # Allow HTTP/HTTPS iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT # Allow ping iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT NAT Example # # Enable IP forwarding echo 1 \u0026gt; /proc/sys/net/ipv4/ip_forward # NAT for internal network (eth1) to internet (eth0) iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT iptables -A FORWARD -i eth0 -o eth1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT Notes # Iptables rules are processed in order from first to last The first matching rule determines the fate of the packet If no rules match, the chain\u0026rsquo;s default policy is applied Iptables doesn\u0026rsquo;t persist rules by default - they must be saved Modern Linux systems are moving to nftables as iptables\u0026rsquo; successor ","date":"18 March 2026","externalUrl":null,"permalink":"/linux/linux-iptables-firewall/","section":"Linux Knowledge Base","summary":"Complete guide to Linux iptables firewall. Covers tables (filter, nat, mangle), chains (INPUT, OUTPUT, FORWARD), targets (ACCEPT, DROP, REJECT), and practical firewall rules.","title":"Linux iptables Firewall Guide - Complete Tutorial","type":"linux"},{"content":" What is kernel # Kernel is the main component of an operating system ,it is thw first program that is loaded by thw bootloader when the computer is switched on . and it run in the memory till the systm is shut down.\nAnd the kernel is an interface between the use applications and hardware.\nAn os cannot function without a kernel.\nFunctions of Kernel # Manages the interaction between user applications adnd system hardware.\nMemory Management : Allcation \u0026amp; Dealocation of memory among various processes.\nDevice Management : managing secondary devices. secondary stand for any storage device whish is present apart from the primary Memory (RAM). Hdd ,ssd USB all that is a part of secondary storage devies .\nResource Management : Ensures resources are correctly shared among different processes .\nTypes Of kernel # Monolithic Kernel : # Both user space and kernel space occupy the same memory area. Respose time of a monolithic kernel is low . (leading to fast performance ) Size of this kernel is lager de to large size of its code. Lack of separation increses the complexity of Monolithic kernel . System component are dependent upon each other. Example : linux ,Unix . Micro kernel : # use space and kernel space are implemented in separate memory areas .\nsize of the kernel is smaller .\nIt has high stability due to lesser services in kernel space.\nlarge number of system calls and context switches. more Complexity\nEXecution speed reduce due to frequennt communction between separet user space and kernel space . Example : AmigaOS and Minix and k42\nhybrid Kernel # Combination of Monolithic and Micro\nSome non-essential code is kept in kernel space to speed up the exexution process.\nAs fast as Monolithic Kernel\nExample : windows Nt , Netware\nExo Kernel # Developed by Massachusetts Institute of Technology .\nFocuses on application-level management Of Resources .\nEnsures the no abstration are forced on the Develpores .\nDevelopers can use any abstration as and when required .\nProvides a low-level interface .\nSeparates Security and management of resources .\nIncreased work for application developers . Example : Nemesis ,EXos\nNano Kernel # \u0026ldquo;NANO\u0026rdquo; refers to the size of the kernel .\nthe size of Nano Kernel is smaller as compared to aall other types .\nthe desing of nano Kernel resembles closely with Micro Kernel :\nit provides hardware abstraction . It does not provide system servies\nMajority of the code is present in the kernel space .\nExample: EROS\n","date":"18 March 2026","externalUrl":null,"permalink":"/tutorials/linux-kernel-explained/","section":"Tutorials - Linux, Android \u0026 Development Guides","summary":"Comprehensive explanation of the Linux kernel. Covers kernel functions, memory management, device management, device drivers, and kernel types (monolithic, microkernel, hybrid).","title":"Linux Kernel Explained - Types and Functions","type":"tutorials"},{"content":"Here\u0026rsquo;s a comprehensive list of command-line tools to gather system information like RAM, CPU, storage, devices, etc., on a Linux machine:\n🧠 CPU Information # Command Description lscpu Displays CPU architecture details (cores, threads, model, etc.) cat /proc/cpuinfo Raw CPU information (model, vendor, MHz, etc.) nproc Shows number of processing units (cores) available top or htop Real-time CPU usage (use htop for a better UI) 💾 RAM Information # Command Description free -h Shows free, used, and total memory (human-readable) cat /proc/meminfo Detailed memory information vmstat Memory, swap, I/O, and CPU usage top or htop Real-time RAM usage 💽 Disk and Partition Info # Command Description df -h Shows disk space usage per mount point lsblk Lists block devices (drives, partitions) fdisk -l Lists disk partitions (requires sudo) du -sh /path Shows disk usage of a folder mount Lists all mounted file systems 🖥️ GPU Information # Command Description `lspci grep -i vga` Lists GPU info (vendor, model) `glxinfo grep \u0026ldquo;OpenGL\u0026rdquo;` OpenGL version and renderer (requires mesa-utils) nvidia-smi For NVIDIA GPUs (requires NVIDIA drivers) 📡 Network Information # Command Description ip a Shows IP addresses and network interfaces ip link Network interfaces and status ifconfig (Old) Shows interfaces and IPs (install net-tools) ss -tuln Listening ports and connections nmcli NetworkManager CLI tool ping, traceroute, dig, nslookup Networking tools 🔧 System \u0026amp; Hardware Information # Command Description uname -a Kernel version, architecture hostnamectl Shows hostname, OS, kernel uptime Shows system uptime dmesg Kernel ring buffer (hardware-related logs) lsb_release -a Distro info (may need lsb-release package) neofetch or screenfetch Stylish summary of system info inxi -Fx Very detailed system info (install inxi) lshw Lists detailed hardware info (run with sudo) lsusb Lists USB devices lspci Lists PCI devices 🧰 Combined Tools # Command Description htop Interactive system monitor (CPU, RAM, processes) glances Real-time, multi-resource monitor (CPU, RAM, disk, net) bpytop / bashtop Pretty top-like system monitor ✅ Recommended Combo for Daily Use # lscpu \u0026amp;\u0026amp; free -h \u0026amp;\u0026amp; lsblk \u0026amp;\u0026amp; df -h \u0026amp;\u0026amp; ip a \u0026amp;\u0026amp; uname -a ","date":"18 March 2026","externalUrl":null,"permalink":"/linux/linux-system-info-commands/","section":"Linux Knowledge Base","summary":"Complete reference for Linux system information commands. Learn to use lscpu, free, df, lsblk, lspci, ip, and other tools for monitoring.","title":"Linux System Information Commands - Complete Reference","type":"linux"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/linux-desktop/","section":"Tags","summary":"","title":"Linux-Desktop","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/linux-from-scratch/","section":"Tags","summary":"","title":"Linux-From-Scratch","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/linux-kernel/","section":"Tags","summary":"","title":"Linux-Kernel","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/linux-security/","section":"Tags","summary":"","title":"Linux-Security","type":"tags"},{"content":"On Void Linux, installed programs are managed by XBPS. Here are the common and useful ways to list them, depending on what you want to see.\n1. List all installed packages (most common) # xbps-query -l This shows all installed packages, including libraries and dependencies.\nExample output:\nii firefox-121.0_1 ii vim-9.1.0042_1 ii glibc-2.38_2 2. List only explicitly installed packages (not dependencies) # xbps-query -m This is usually what people mean by “programs I installed myself”.\n3. List installed packages with versions # xbps-query -l | awk \u0026#39;{print $2}\u0026#39; Or more detailed:\nxbps-query -l -v 4. Check if a specific program is installed # xbps-query -s firefox Or exact match:\nxbps-query -l | grep firefox 5. List installed packages and save to a file # Useful for backups or migration:\nxbps-query -m \u0026gt; installed-packages.txt Restore later with:\nsudo xbps-install -S -y $(cat installed-packages.txt) 6. List files installed by a specific package # xbps-query -f firefox 7. List orphaned packages (unused dependencies) # xbps-remove -o Quick recommendation # If you just want “everything I installed”, use:\nxbps-query -m If you want everything on the system, use:\nxbps-query -l ","date":"18 March 2026","externalUrl":null,"permalink":"/linux/void-linux-list-packages/","section":"Linux Knowledge Base","summary":"Guide to listing installed packages on Void Linux. Uses xbps-query to show all packages, manually installed programs, versions, and orphaned dependencies.","title":"List Installed Packages on Void Linux - Complete Guide","type":"linux"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/maintenance/","section":"Tags","summary":"","title":"Maintenance","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/microkernel/","section":"Tags","summary":"","title":"Microkernel","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/minimal-linux/","section":"Categories","summary":"","title":"Minimal Linux","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/minimal-linux/","section":"Tags","summary":"","title":"Minimal-Linux","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/monitoring/","section":"Tags","summary":"","title":"Monitoring","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/monolithic/","section":"Tags","summary":"","title":"Monolithic","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/mpv/","section":"Tags","summary":"","title":"Mpv","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/nat/","section":"Tags","summary":"","title":"Nat","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/netfilter/","section":"Tags","summary":"","title":"Netfilter","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/network/","section":"Categories","summary":"","title":"Network","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/network/","section":"Tags","summary":"","title":"Network","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/networking/","section":"Tags","summary":"","title":"Networking","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/openrc/","section":"Tags","summary":"","title":"Openrc","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/operating-system/","section":"Tags","summary":"","title":"Operating-System","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/package-management/","section":"Categories","summary":"","title":"Package Management","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/package-manager/","section":"Tags","summary":"","title":"Package-Manager","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/packages/","section":"Tags","summary":"","title":"Packages","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/pihole/","section":"Tags","summary":"","title":"Pihole","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/pipewire/","section":"Tags","summary":"","title":"Pipewire","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/printer/","section":"Tags","summary":"","title":"Printer","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/printing/","section":"Tags","summary":"","title":"Printing","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/productivity/","section":"Categories","summary":"","title":"Productivity","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/productivity/","section":"Tags","summary":"","title":"Productivity","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/pulseaudio/","section":"Tags","summary":"","title":"Pulseaudio","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/qemu/","section":"Categories","summary":"","title":"QEMU","type":"categories"},{"content":" 🧠 What Is QEMU? # QEMU (Quick EMUlator) is a generic and open-source emulator and virtualizer.\n🧰 QEMU Has Two Main Modes: # Emulation Mode:\nEmulates one hardware architecture on another (e.g., ARM on x86). No hardware acceleration — slower but portable. Virtualization Mode (with KVM):\nRuns guest OSes using your CPU\u0026rsquo;s virtualization features (Intel VT-x, AMD-V). Requires KVM and a Linux host. Much faster, near-native performance. 🖥️ Real-World Use Cases # Use Case Description OS Development Test kernels or bootloaders without rebooting your PC. Embedded Development Emulate ARM, RISC-V, MIPS boards on x86. CI Testing Run headless QEMU in GitHub Actions, Jenkins, etc. Server Virtualization Lightweight VMs for dev/staging. Try New OS Test Linux/BSD distros or even Windows without touching your host. ✅ Installing QEMU in Detail # 🐧 On Ubuntu/Debian: # sudo apt update sudo apt install qemu qemu-kvm libvirt-daemon-system virtinst bridge-utils virt-manager qemu: Core QEMU binaries qemu-kvm: KVM support for acceleration libvirt-*: Tools for managing VMs virt-manager: GUI tool to manage virtual machines 🔍 Verify Installation: # qemu-system-x86_64 --version 🏗️ Step-by-Step VM Creation (x86 Example) # 🔹 Step 1: Create a virtual disk # qemu-img create -f qcow2 myvm.qcow2 20G qcow2: QEMU\u0026rsquo;s optimized disk format (supports snapshots, compression) 20G: Disk size 🔹 Step 2: Download an ISO (e.g., Ubuntu, Debian, TinyCore, etc.) # Example:\nwget https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-*.iso 🔹 Step 3: Start VM with ISO # qemu-system-x86_64 \\ -hda myvm.qcow2 \\ -cdrom debian.iso \\ -boot d \\ -m 2048 \\ -smp 2 \\ -enable-kvm \\ -cpu host Option Meaning -boot d Boot from CD-ROM -m 2048 2GB RAM -smp 2 2 CPU cores -enable-kvm Enables hardware acceleration -cpu host Uses your host\u0026rsquo;s CPU features in the VM 💡 Running QEMU Without GUI (Headless) # 📦 -nographic # qemu-system-x86_64 -hda myvm.qcow2 -m 1024 -nographic Redirects serial output to your terminal. Useful for server OS installs. Combine with serial monitor: # -serial mon:stdio Example:\nqemu-system-x86_64 -hda myvm.qcow2 -m 1024 -nographic -serial mon:stdio 🌐 Networking Setup # 🧾 Basic NAT Networking # -net nic -net user Adds a virtual NIC and uses user-mode NAT networking.\n🔌 Port Forwarding (e.g., SSH into VM): # -net nic -net user,hostfwd=tcp::2222-:22 Then SSH into guest:\nssh -p 2222 user@localhost 🔄 Snapshot Support # qemu-system-x86_64 -hda myvm.qcow2 -snapshot All changes are temporary. Use for testing risky software/configs. 🔗 Sharing Files Between Host and Guest # Using 9p VirtIO (Linux guest): # On host: # qemu-system-x86_64 \\ -hda myvm.qcow2 \\ -net nic -net user \\ -virtfs local,path=/home/user/shared,security_model=passthrough,mount_tag=hostshare Inside guest: # sudo mount -t 9p -o trans=virtio hostshare /mnt ⚙️ Emulating Other Architectures # 🧬 ARM Example: # qemu-system-arm -M versatilepb -m 256 \\ -kernel kernel-qemu -hda raspbian.img \\ -append \u0026#34;root=/dev/sda2 rootfstype=ext4 rw\u0026#34; \\ -serial stdio -display none -M versatilepb: Emulated ARM board -kernel: Bootloader kernel image -append: Boot parameters 🐏 RISC-V Example: # qemu-system-riscv64 \\ -machine virt \\ -nographic \\ -m 1G \\ -kernel bbl \\ -drive file=rootfs.ext2,format=raw,id=hd0 \\ -device virtio-blk-device,drive=hd0 📊 Disk Image Management # Convert a raw disk to qcow2: # qemu-img convert -f raw -O qcow2 disk.img disk.qcow2 Resize a disk: # qemu-img resize myvm.qcow2 +10G 🔒 Secure and Isolated Testing # You can run potentially dangerous software inside a QEMU VM with -snapshot and no network:\nqemu-system-x86_64 -hda malware.qcow2 -snapshot -net none 🧪 Bonus: Run QEMU in Daemon Mode # Run VM in the background:\nqemu-system-x86_64 -hda myvm.qcow2 -m 1024 -daemonize Control VM via QEMU monitor socket or SSH.\n🛑 Stop and Kill QEMU VMs # List QEMU instances:\nps aux | grep qemu Kill them:\nkill \u0026lt;pid\u0026gt; 📁 QEMU vs VirtualBox vs KVM # Feature QEMU VirtualBox KVM GUI ❌ (CLI) ✅ ❌ (with virt-manager) Headless ✅ ✅ ✅ Cross-Arch Emulation ✅ ❌ ❌ Speed Medium (fast with KVM) Good Very fast Snapshot Support ✅ ✅ ✅ 🧭 Summary: What You Can Do with QEMU # ✅ Run Linux or BSD headlessly ✅ Emulate ARM/RISC-V boards ✅ Build custom test environments ✅ Automate CI pipelines ✅ Use with Docker for full-stack testing ✅ Perfect for OS/driver/kernel development\nGreat! Let\u0026rsquo;s now dive into advanced QEMU usage, focusing on topics like:\nCustom CPU models BIOS/UEFI boot TPM passthrough Multiple networks/interfaces Advanced QMP (QEMU Machine Protocol) and monitor control Running QEMU as a systemd service Creating templates for reproducible virtual labs Automation with cloud-init and preseed QEMU performance tuning 🧠 1. Custom CPU Models and Feature Masking # Use a specific CPU model: # qemu-system-x86_64 -cpu Skylake-Client Use your host CPU and enable all features: # -cpu host,+vmx,+aes,+sse4.2 See available CPU models: # qemu-system-x86_64 -cpu help This is helpful when the guest OS depends on specific features like virtualization, AES instructions, or AVX.\n🧰 2. BIOS vs UEFI Boot # BIOS Boot (Default): # QEMU uses SeaBIOS by default:\nqemu-system-x86_64 -hda disk.qcow2 UEFI Boot: # Use OVMF firmware:\n📦 Install OVMF (on Ubuntu): # sudo apt install ovmf ✅ Boot with UEFI: # qemu-system-x86_64 \\ -drive if=pflash,format=raw,readonly=on,file=/usr/share/OVMF/OVMF_CODE.fd \\ -drive if=pflash,format=raw,file=OVMF_VARS.fd \\ -hda disk.qcow2 🔐 3. TPM Passthrough (for Secure Boot / Windows 11) # Step 1: Install swtpm # sudo apt install swtpm Step 2: Create a TPM socket and launch QEMU: # swtpm socket --tpm2 --ctrl type=unixio,path=/tmp/swtpm-sock \u0026amp; qemu-system-x86_64 \\ -chardev socket,id=chrtpm,path=/tmp/swtpm-sock \\ -tpmdev emulator,id=tpm0,chardev=chrtpm \\ -device tpm-tis,tpmdev=tpm0 \\ -hda win11.qcow2 This makes Windows 11 or secure-boot Linux guests work.\n🌐 4. Advanced Networking # ✅ Multiple Interfaces: # -netdev user,id=net0 -device e1000,netdev=net0 \\ -netdev user,id=net1 -device rtl8139,netdev=net1 🛠 Tap + Bridge Networking (host integration): # Create a tap interface: sudo ip tuntap add dev tap0 mode tap sudo ip link set tap0 up Attach to QEMU: -netdev tap,id=net0,ifname=tap0,script=no,downscript=no -device virtio-net,netdev=net0 For persistent setup, use bridge-utils or systemd-networkd.\n🧪 5. Monitor, QMP, and Live Control # ⌨️ Human-readable Monitor: # -monitor stdio 🧠 QMP JSON API: # Enable the machine protocol interface:\n-qmp unix:/tmp/qmp-sock,server,nowait Send QMP commands: # Use socat:\nsocat - UNIX-CONNECT:/tmp/qmp-sock Then send:\n{ \u0026#34;execute\u0026#34;: \u0026#34;query-status\u0026#34; } QMP lets you:\nHot-plug CPUs, memory, disks Query VM info in JSON Integrate with libvirt, Ansible 🧰 6. Running QEMU as a Systemd Service # Create a service file:\n[Unit] Description=QEMU VM After=network.target [Service] ExecStart=/usr/bin/qemu-system-x86_64 -hda /var/lib/vms/ubuntu.qcow2 -m 2048 -enable-kvm -nographic Restart=always [Install] WantedBy=multi-user.target Save as /etc/systemd/system/qemu-vm.service, then:\nsudo systemctl enable --now qemu-vm Perfect for headless servers.\n📦 7. Use Cloud-Init for VM Provisioning # Download cloud image: wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img Create cloud-init ISO: cloud-localds user-data.img user-data Boot with cloud-init: qemu-system-x86_64 \\ -drive file=jammy-server-cloudimg-amd64.img,format=qcow2 \\ -drive file=user-data.img,format=raw \\ -net nic -net user,hostfwd=tcp::2222-:22 \\ -enable-kvm -m 2048 Cloud-init automates:\nUser creation SSH key injection Package install Custom scripts ⚡ 8. Performance Tuning # Use virtio devices: # -device virtio-blk-pci,drive=hd -drive file=vm.qcow2,if=none,id=hd Use cache=none for best disk performance: # -drive file=vm.qcow2,if=virtio,cache=none Use hugepages: # -m 4096 -mem-path /dev/hugepages -mem-prealloc Enable hugepages on host:\necho 256 \u0026gt; /proc/sys/vm/nr_hugepages 📁 9. Templates for Lab Automation # Create a reusable VM template: # Install Linux into a qcow2 image. Don\u0026rsquo;t autologin or add user config. Use cloud-init or kickstart/preseed to auto-configure cloned VMs. Clone with: qemu-img create -f qcow2 -b base.qcow2 newlab.qcow2 Linked clones make dev labs fast and space-efficient.\n🧠 10. Other Tips # Combine with virt-manager or libvirt for hybrid GUI/CLI use.\nUse SPICE instead of VNC for better graphics:\n-spice port=5930,disable-ticketing Add USB devices:\n-usb -device usb-host,hostbus=1,hostaddr=2 ","date":"18 March 2026","externalUrl":null,"permalink":"/tutorials/qemu-complete-tutorial/","section":"Tutorials - Linux, Android \u0026 Development Guides","summary":"Master QEMU virtualization with this detailed guide. Learn to create VMs, configure networking, use KVM, manage disk images, and run headless virtual machines.","title":"QEMU Complete Tutorial - Virtualization Guide","type":"tutorials"},{"content":"Your QEMU command is almost correct, but the problem is here 👇\n-cdrom You did not specify the ISO file, so QEMU has nothing mounted.\nYou also have three SolidWorks CDs, so you must mount CD1 first, then swap to CD2 and CD3 during install.\n✅ Correct Command — Mount CD1 # Run this:\nsudo qemu-system-i386 \\ -machine pc,accel=kvm \\ -cpu pentium3 \\ -m 2048 \\ -drive file=winxp.qcow2,if=ide \\ -cdrom \u0026#34;SolidWorks 2004 SP0 CD1.ISO\u0026#34; \\ -boot c \\ -vga std \\ -usb \\ -device usb-host,vendorid=0x0781,productid=0x5567 \\ -nic user,model=e1000 \\ -monitor stdio 🔄 When Installer Asks for CD2 or CD3 # Do NOT close QEMU.\nIn the QEMU monitor ((qemu)), type:\neject ide1-cd0 Then change ISO:\nchange ide1-cd0 \u0026#34;SolidWorks 2004 SP0 CD2.ISO\u0026#34; Later:\nchange ide1-cd0 \u0026#34;SolidWorks 2004 SP0 CD3.ISO\u0026#34; ✅ Alternative (clearer CD handling) # You can explicitly define the CD drive:\n-drive file=\u0026#34;SolidWorks 2004 SP0 CD1.ISO\u0026#34;,media=cdrom,if=ide Instead of -cdrom.\n⚠️ Important Notes for SolidWorks 2004 # Since you’re installing on Windows XP in QEMU:\n✔ 32-bit only — correct ✔ Pentium III CPU is good ✔ 2 GB RAM perfect ✔ IDE disk correct ✔ VGA std OK\n🧠 Quick checklist if SolidWorks doesn\u0026rsquo;t see USB # Inside XP:\nDevice Manager → Universal Serial Bus controllers Must show USB Mass Storage Device If not, use the raw disk method instead of usb-host.\nIf SolidWorks setup fails or crashes, tell me:\n1️⃣ Exact error message 2️⃣ At which CD it stops 3️⃣ Screenshot text (type it)\nWe’ll fix it 👍\nMount multiple Iso cdrom to vm # Short answer: No — not with only one CD drive. But YES, you can mount all 3 ISOs at once if you add multiple virtual CD-ROM drives to QEMU 👍\nSolidWorks 2004 was designed for physical PCs that sometimes had more than one drive, so this works fine.\n✅ Run with 3 CD Drives (CD1 + CD2 + CD3) # Use this command:\nsudo qemu-system-i386 \\ -machine pc,accel=kvm \\ -cpu pentium3 \\ -m 2048 \\ -drive file=winxp.qcow2,if=ide \\ -drive file=\u0026#34;SolidWorks 2004 SP0 CD1.ISO\u0026#34;,media=cdrom,if=ide,index=1 \\ -drive file=\u0026#34;SolidWorks 2004 SP0 CD2.ISO\u0026#34;,media=cdrom,if=ide,index=2 \\ -drive file=\u0026#34;SolidWorks 2004 SP0 CD3.ISO\u0026#34;,media=cdrom,if=ide,index=3 \\ -boot c \\ -vga std \\ -usb \\ -device usb-host,vendorid=0x0781,productid=0x5567 \\ -nic user,model=e1000 \\ -monitor stdio 🧾 What You’ll See in Windows XP # Inside XP → My Computer:\nCD Drive (D:) CD Drive (E:) CD Drive (F:) SolidWorks installer should automatically read them.\n⚠️ Important Notes # • Works only if the installer supports multi-drive detection (SolidWorks usually does) • IDE supports 4 devices per controller — we’re fine here • If one ISO isn’t read, installer may still ask you to browse manually\n🟡 Alternative (cleaner bus layout) # If QEMU complains about IDE slots, use:\n-drive file=\u0026#34;SolidWorks 2004 SP0 CD1.ISO\u0026#34;,media=cdrom,if=none,id=cd1 \\ -device ide-cd,drive=cd1,bus=ide.1 -drive file=\u0026#34;SolidWorks 2004 SP0 CD2.ISO\u0026#34;,media=cdrom,if=none,id=cd2 \\ -device ide-cd,drive=cd2,bus=ide.2 -drive file=\u0026#34;SolidWorks 2004 SP0 CD3.ISO\u0026#34;,media=cdrom,if=none,id=cd3,bus=ide.3 🏁 Recommendation # ✔ Mounting all three saves time ✔ Good for big multi-CD installers ✔ XP + SolidWorks 2004 works fine this way\n","date":"18 March 2026","externalUrl":null,"permalink":"/linux/qemu-windows-xp-multiple-cdrom/","section":"Linux Knowledge Base","summary":"Complete guide to installing Windows XP in QEMU with multiple CD-ROMs. Covers ISO mounting, IDE configuration, and driver installation for multi-disc setups.","title":"QEMU Windows XP - Mount Multiple CD-ROMs Tutorial","type":"linux"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/reference/","section":"Categories","summary":"","title":"Reference","type":"categories"},{"content":"Running Alpine Linux (32-bit) on QEMU is a straightforward process. Below are the steps to set up and run Alpine Linux in a QEMU virtual machine.\nPrerequisites # QEMU Installed: Ensure you have QEMU installed on your host machine. You can install it using your package manager. For example, on Ubuntu, you can run:\nsudo apt install qemu Alpine Linux ISO: Download the latest 32-bit Alpine Linux ISO from the Alpine Linux downloads page.\nStep 1: Create a Disk Image # You need to create a virtual disk image where Alpine Linux will be installed. You can create a disk image using the following command:\nqemu-img create -f qcow2 alpine.img 2G This command creates a 2GB disk image named alpine.img. You can adjust the size as needed.\nStep 2: Boot Alpine Linux in QEMU # Now, you can boot the Alpine Linux ISO using QEMU and the disk image you just created. Use the following command:\nqemu-system-i386 -boot d -cdrom alpine-\u0026lt;version\u0026gt;-x86.iso -hda alpine.img -m 512 -net nic -net user Replace \u0026lt;version\u0026gt; with the actual version number of the Alpine ISO you downloaded. This command does the following:\n-boot d: Boots from the CD-ROM (ISO). -cdrom alpine-\u0026lt;version\u0026gt;-x86.iso: Specifies the Alpine Linux ISO file. -hda alpine.img: Specifies the virtual hard disk image. -m 512: Allocates 512 MB of RAM to the virtual machine. -net nic -net user: Sets up user-mode networking. Step 3: Install Alpine Linux # Boot from the ISO: When you run the QEMU command, it will boot from the Alpine Linux ISO. Follow the Installation Instructions: Once the Alpine Linux boot menu appears, select the option to install Alpine Linux. Follow the prompts to set up your system: Choose the keyboard layout. Set up the network (you can use DHCP). Partition the disk (you can use the default options). Format the partitions and install the system. Set the root password and configure any additional settings as prompted. Step 4: Reboot into the Installed System # After the installation is complete, you will be prompted to reboot. Before rebooting, make sure to remove the ISO from the boot sequence. You can do this by running the following command:\nqemu-system-i386 -boot c -hda alpine.img -m 512 -net nic -net user or\nqemu-system-x86_64 \\ -hda alpine.img \\ -m 1024 \\ -net nic \\ -net user,hostfwd=tcp::2222-:22 To run the vm with no display and open the ssh on port 2222 and the port 8000 to run flask app if is needed\nqemu-system-i386 -hda alpine.img -m 2048 -smp 2 -display none -serial stdio -net nic -net user,hostfwd=tcp::2222-:22,hostfwd=tcp::8080-:80 This command will boot from the hard disk instead of the CD-ROM.\nStep 5: Log In # Once the system boots, you can log in with the root user and the password you set during installation.\nOr\nYou can ssh to the VM using this command\nssh -p 2222 user@localhost ","date":"18 March 2026","externalUrl":null,"permalink":"/linux/alpine-linux-32-bit-qemu/","section":"Linux Knowledge Base","summary":"Complete guide to running Alpine Linux 32-bit on QEMU. Covers disk image creation, ISO boot, installation, and SSH configuration.","title":"Run Alpine Linux 32-bit on QEMU - Complete Guide","type":"linux"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/security/","section":"Categories","summary":"","title":"Security","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/security-mistakes/","section":"Tags","summary":"","title":"Security-Mistakes","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/solidworks/","section":"Tags","summary":"","title":"Solidworks","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/sound/","section":"Tags","summary":"","title":"Sound","type":"tags"},{"content":"To set up sound on Void Linux, you usually need to install and configure ALSA, PulseAudio, or PipeWire, depending on your preferences. Here’s a full step-by-step guide to get basic and advanced audio working:\n✅ 1. Check Your Audio Hardware # lspci | grep -i audio Or, for USB devices:\nlsusb ✅ 2. Install Audio Packages # Void Linux uses runit, so we\u0026rsquo;ll avoid systemd-specific commands.\n🔹 For ALSA (basic sound): # sudo xbps-install -S alsa-utils alsa-lib You can test ALSA:\naplay /usr/share/sounds/alsa/Front_Center.wav 🔹 For PulseAudio (easier desktop audio control): # sudo xbps-install -S pulseaudio pulsemixer pavucontrol Enable PulseAudio at login by adding this to ~/.xinitrc or your desktop session autostart:\npulseaudio --start 🔹 For PipeWire (modern alternative to PulseAudio): # sudo xbps-install -S pipewire wireplumber pipewire-pulse pavucontrol Also, add to your autostart:\npipewire \u0026amp; wireplumber \u0026amp; Check PipeWire status:\npw-cli ls Node ✅ 3. Add Your User to the audio Group # sudo usermod -aG audio $USER Log out and log back in.\n✅ 4. Unmute and Set Volumes with alsamixer # Run:\nalsamixer Press F6 to select the sound card Use arrow keys to raise volumes Press M to unmute anything muted To save the settings:\nsudo alsactl store ✅ 5. Test Audio Output # Play a test sound:\nspeaker-test -c2 -t wav Or use:\naplay somefile.wav mpv somefile.mp3 ✅ 6. Check Permissions and Devices # Make sure your user can access /dev/snd/*:\nls -l /dev/snd You should see audio as the group.\n✅ 7. Troubleshooting Tips # Use pavucontrol to switch output devices.\nCheck if HDMI or headphone output is selected.\nIf Firefox or another app has no sound, try:\npulseaudio -k pulseaudio --start 🧠 Optional: Autostart in runit # Create runit services for PipeWire or PulseAudio if you want them system-wide:\nsudo ln -s /etc/sv/pipewire /var/service/ Accessing the Sound Settings Via GUI # pavucontrol ","date":"18 March 2026","externalUrl":null,"permalink":"/linux/sound-setup-void-linux/","section":"Linux Knowledge Base","summary":"Guide to configuring audio on Void Linux. Covers ALSA, PulseAudio, PipeWire setup, alsamixer, and troubleshooting sound issues.","title":"Sound Setup on Void Linux ","type":"linux"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/ssh/","section":"Tags","summary":"","title":"Ssh","type":"tags"},{"content":"This warning means the SSH host key for localhost:2222 has changed since the last time you connected — very likely because:\nYou recreated or reinstalled the VM, or You\u0026rsquo;re using a different VM on the same forwarded port (2222). This is a normal safety feature to prevent man-in-the-middle attacks, but since you\u0026rsquo;re testing locally and you control both host and guest, it\u0026rsquo;s safe to fix.\n✅ To resolve the issue: # Edit the known_hosts file to remove the offending entry:\nssh-keygen -R [localhost]:2222 This will remove the old key from ~/.ssh/known_hosts.\nThen retry:\nssh -p 2222 user@localhost The new key will be added, and the warning will go away.\n","date":"18 March 2026","externalUrl":null,"permalink":"/linux/ssh-qemu-vm-fix/","section":"Linux Knowledge Base","summary":"Simple guide to fix SSH host key verification errors when connecting to QEMU VMs. Uses ssh-keygen to remove old keys and reconnect safely.","title":"SSH to QEMU VM - Fix Host Key Verification Error","type":"linux"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/ssh-keys/","section":"Tags","summary":"","title":"Ssh-Keys","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/sway/","section":"Categories","summary":"","title":"Sway","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/sway/","section":"Tags","summary":"","title":"Sway","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/sysadmin/","section":"Tags","summary":"","title":"Sysadmin","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/system-info/","section":"Tags","summary":"","title":"System-Info","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/terminal/","section":"Categories","summary":"","title":"Terminal","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/terminal/","section":"Tags","summary":"","title":"Terminal","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/tiling-wm/","section":"Tags","summary":"","title":"Tiling-Wm","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/tips/","section":"Tags","summary":"","title":"Tips","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/tricks/","section":"Tags","summary":"","title":"Tricks","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/tutorial/","section":"Categories","summary":"","title":"Tutorial","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/tutorial/","section":"Tags","summary":"","title":"Tutorial","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/video-player/","section":"Tags","summary":"","title":"Video-Player","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/vm/","section":"Tags","summary":"","title":"Vm","type":"tags"},{"content":"Using mpv with YouTube is a popular way to watch videos from the terminal with fewer ads, keyboard control, and high performance. mpv relies on yt-dlp (or sometimes youtube-dl) to fetch the stream.\nHere’s the full setup and usage.\n✅ 1) Install mpv and yt-dlp # On Linux:\nDebian / Ubuntu # sudo apt install mpv yt-dlp Arch # sudo pacman -S mpv yt-dlp Void Linux # sudo xbps-install -S mpv yt-dlp Alpine # sudo apk add mpv yt-dlp ▶️ 2) Play a YouTube Video # Just pass the URL:\nmpv https://www.youtube.com/watch?v=VIDEO_ID mpv automatically calls yt-dlp and starts streaming.\n📺 3) Play in Best Quality / Limit Resolution # Force max 1080p: # mpv --ytdl-format=\u0026#34;bestvideo[height\u0026lt;=1080]+bestaudio/best\u0026#34; URL 720p: # mpv --ytdl-format=\u0026#34;best[height\u0026lt;=720]\u0026#34; URL 🔊 4) Audio Only (Music / Podcasts) # mpv --no-video URL Or:\nmpv --ytdl-format=bestaudio URL 📃 5) Play a Playlist # mpv handles playlists automatically:\nmpv https://www.youtube.com/playlist?list=XXXXX Limit number of videos:\nmpv --playlist-start=1 --playlist-end=10 URL ⏯️ Useful mpv Keys # While playing:\nKey Action Space Pause ← / → Seek 5s ↑ / ↓ Seek 1 min 9 / 0 Volume f Fullscreen q Quit s Screenshot ⚙️ 6) Recommended Config # Create:\nmkdir -p ~/.config/mpv nano ~/.config/mpv/mpv.conf Example:\nhwdec=auto ytdl-format=bestvideo+bestaudio/best cache=yes cache-secs=30 ❗ If YouTube Stops Working # Usually YouTube changes something—update yt-dlp:\nyt-dlp -U or via package manager:\nsudo xbps-install -Su yt-dlp 🧠 Extra Tips # Use cookies (for age-restricted/private videos): # Export cookies from your browser, then:\nmpv --cookies --cookies-file cookies.txt URL Download instead of stream: # yt-dlp URL ","date":"18 March 2026","externalUrl":null,"permalink":"/tutorials/mpv-youtube-player/","section":"Tutorials - Linux, Android \u0026 Development Guides","summary":"Guide to using mpv with YouTube support. Covers yt-dlp installation, playback controls, streaming YouTube from terminal, and advanced options.","title":"Watch YouTube Videos with mpv Player - Complete Guide","type":"tutorials"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/wayland/","section":"Categories","summary":"","title":"Wayland","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/wayland/","section":"Tags","summary":"","title":"Wayland","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/wayland-compositor/","section":"Tags","summary":"","title":"Wayland-Compositor","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/windows/","section":"Categories","summary":"","title":"Windows","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/windows-xp/","section":"Tags","summary":"","title":"Windows-Xp","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/xbps/","section":"Tags","summary":"","title":"Xbps","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/xfce/","section":"Tags","summary":"","title":"Xfce","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/xfce/","section":"Categories","summary":"","title":"XFCE","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/xfce4/","section":"Tags","summary":"","title":"Xfce4","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/youtube/","section":"Tags","summary":"","title":"Youtube","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/yt-dlp/","section":"Tags","summary":"","title":"Yt-Dlp","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/alsamixer/","section":"Tags","summary":"","title":"Alsamixer","type":"tags"},{"content":"Of course! 📚 Here’s a list of excellent books for learning Databases and especially Relational Algebra:\nBeginner-Friendly: # \u0026ldquo;Database System Concepts\u0026rdquo;\n— by Abraham Silberschatz, Henry Korth, S. Sudarshan\n➔ A classic. Very clear explanations of relational algebra, relational calculus, and SQL.\n➔ Covers theory + practical examples.\n\u0026ldquo;Fundamentals of Database Systems\u0026rdquo;\n— by Ramez Elmasri and Shamkant Navathe\n➔ Very detailed. Good for understanding how relational algebra connects to real database systems.\n\u0026ldquo;Learning SQL\u0026rdquo;\n— by Alan Beaulieu\n➔ If you want to quickly become comfortable with querying databases (SQL), this book is simple and practical.\n➔ Not deep into theory, but helps you apply relational thinking.\nFor deeper Theory: # \u0026ldquo;Principles of Database and Knowledge-Base Systems\u0026rdquo;\n— by Jeffrey D. Ullman\n➔ Heavy on relational algebra, relational calculus, and logic foundations.\n➔ Best if you like a more mathematical approach.\n\u0026ldquo;Foundations of Databases\u0026rdquo;\n— by Serge Abiteboul, Richard Hull, Victor Vianu\n➔ Advanced and theoretical.\n➔ Covers relational algebra, logic programming, complexity of queries, etc.\nBonus (free online resource): # \u0026ldquo;Database Management Systems\u0026rdquo; — by Raghu Ramakrishnan and Johannes Gehrke\n➔ Some versions and lecture notes are available online.\n➔ Well-explained relational algebra with many examples. If you want a short plan: # First Silberschatz ➔ easy intro + relational algebra basics. Then Elmasri/Navathe ➔ details, SQL + design + normalization. Then Ullman ➔ if you want deeper mathematical knowledge. ","date":"18 March 2026","externalUrl":null,"permalink":"/blog/database-books/","section":"Blog","summary":"Curated list of best books for learning databases. Covers SQL, relational algebra, database design, and practical guides for beginners to experts.","title":"Best Database Books - Learning Resources","type":"blog"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/books/","section":"Categories","summary":"","title":"Books","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/books/","section":"Tags","summary":"","title":"Books","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/build/","section":"Tags","summary":"","title":"Build","type":"tags"},{"content":"Here’s a clear, step-by-step guide to rebuilding libmount + mount (util-linux) from source on Void Linux. This is usually not required, but if your system is broken due to version mismatches, building from source can fix it.\n✅ 1. Install build dependencies # You need the development tools and headers:\nsudo xbps-install -Sy base-devel sudo xbps-install -Sy pkg-config gettext-devel Void Linux splits packages, so you also need required -devel packages:\nsudo xbps-install -Sy util-linux-devel If you\u0026rsquo;re rebuilding because util-linux is broken, the above command may fail — that’s okay, you can still build without it.\n✅ 2. Download the latest util-linux source # Util-linux contains mount, umount, libmount, etc.\nwget https://www.kernel.org/pub/linux/utils/util-linux/v2.41/util-linux-2.41.tar.xz tar xf util-linux-2.41.tar.xz cd util-linux-2.41 Replace 2.41 with the release you need.\n✅ 3. Configure the build # Run:\n./configure --prefix=/usr --disable-all-programs --enable-mount --enable-libmount Explanation:\n--prefix=/usr → installs into /usr/bin and /usr/lib --disable-all-programs → disables everything except what you explicitly enable --enable-mount → builds the mount command --enable-libmount → builds libmount.so ✅ 4. Build it # make -j$(nproc) This compiles mount and libmount.\n✅ 5. Install (careful!) # This can overwrite system binaries. Safer method: install to a temporary directory first.\nmake DESTDIR=\u0026#34;$HOME/mount-test\u0026#34; install You’ll find new binaries in:\n$HOME/mount-test/usr/bin/mount $HOME/mount-test/usr/lib/libmount.so.* Test them before installing system-wide.\n⚠️ 6. Test without installing # Run the newly-built mount using an absolute path:\n$HOME/mount-test/usr/bin/mount --version ldd $HOME/mount-test/usr/bin/mount Make sure it properly links to the newly built libmount.so.\n⚠️ 7. If everything works, install to the system # Only do this if your current system is already broken:\nsudo make install 🩹 If your system is badly broken # You may also need to temporarily set:\nexport LD_LIBRARY_PATH=/usr/local/lib:/usr/lib Or override mount’s linked library:\nLD_PRELOAD=/usr/lib/libmount.so.1 mount 🔍 Want easier debugging first? # I can guide you through:\nchecking conflicting libmount versions verifying the /usr/lib symlinks using xbps to fetch the correct .xbps package reinstalling util-linux cleanly If you want, tell me:\nls -l /usr/lib/libmount* xbps-query -l | grep util-linux mount --version ","date":"18 March 2026","externalUrl":null,"permalink":"/linux/build-libmount-from-source/","section":"Linux Knowledge Base","summary":"Guide to building libmount and mount from source. Covers util-linux compilation, library linking, and fixing version mismatches.","title":"Build libmount and mount from Source on Linux","type":"linux"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/career/","section":"Categories","summary":"","title":"Career","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/ci-cd/","section":"Tags","summary":"","title":"Ci-Cd","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/cloud/","section":"Tags","summary":"","title":"Cloud","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/configuration/","section":"Tags","summary":"","title":"Configuration","type":"tags"},{"content":"You can use a simple shell script in your .xinitrc file (or a standalone script) to check if the HDMI monitor is connected using xrandr and then execute the appropriate commands based on the presence of the HDMI monitor. Here\u0026rsquo;s how you can do that:\n1. Create the Display Configuration Script # You can write a small script to detect the connected displays and apply the correct settings. Here\u0026rsquo;s an example script:\n#!/bin/sh # Check if HDMI-1 is connected if xrandr | grep \u0026#34;HDMI-1 connected\u0026#34;; then # If HDMI-1 is connected, set it to 1920x1080 and position it to the right of eDP-1 xrandr --output HDMI-1 --mode 1920x1080 --right-of eDP-1 --primary else # If HDMI-1 is not connected, set eDP-1 to 1366x768 xrandr --output eDP-1 --mode 1366x768 --rate 60.00 --primary fi 2. Using the Script in .xinitrc # You can place this script directly into your .xinitrc file before launching DWM. Here\u0026rsquo;s how the .xinitrc file would look:\n#!/bin/sh # Check display and configure if xrandr | grep \u0026#34;HDMI-1 connected\u0026#34;; then xrandr --output HDMI-1 --mode 1920x1080 --right-of eDP-1 --primary else xrandr --output eDP-1 --mode 1366x768 --rate 60.00 --primary fi # Start background programs (optional) # For example, start nm-applet or picom: # nm-applet \u0026amp; # picom --config ~/.config/picom.conf \u0026amp; # Start DWM exec dwm 3. Making .xinitrc Executable # Once the script is set up in .xinitrc, make sure the .xinitrc file is executable:\nchmod +x ~/.xinitrc 4. Explanation: # Checking HDMI-1: The command xrandr | grep \u0026quot;HDMI-1 connected\u0026quot; checks whether HDMI-1 is connected to the system. Setting resolutions: If HDMI-1 is connected, it will set it to 1920x1080 and position it to the right of eDP-1 (your laptop screen). If HDMI-1 is not connected, it will set the laptop screen eDP-1 to 1366x768. exec dwm: This launches DWM after configuring the displays. 5. Optional: Putting the Display Script in a Separate File # If you prefer to keep the logic in a separate script (instead of directly in .xinitrc), you can create a script, for example, ~/.display.sh:\nCreate the script:\nnano ~/.display.sh Paste the display setup script inside it:\n#!/bin/sh # Check if HDMI-1 is connected if xrandr | grep \u0026#34;HDMI-1 connected\u0026#34;; then xrandr --output HDMI-1 --mode 1920x1080 --right-of eDP-1 --primary else xrandr --output eDP-1 --mode 1366x768 --rate 60.00 --primary fi Make the script executable:\nchmod +x ~/.display.sh Modify your .xinitrc to call this script before launching DWM:\n#!/bin/sh # Run the display setup script ~/.display.sh # Start DWM exec dwm 6. Testing the Setup # After making these changes, you can test the configuration by logging out and running:\nstartx ","date":"18 March 2026","externalUrl":null,"permalink":"/linux/configure-monitors-xrandr-linux/","section":"Linux Knowledge Base","summary":"Guide to configuring monitors with xrandr on Linux. Create scripts to detect HDMI connections and automatically set display resolution and position.","title":"Configure Monitors with xrandr on Linux","type":"linux"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/database/","section":"Tags","summary":"","title":"Database","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/databases/","section":"Categories","summary":"","title":"Databases","type":"categories"},{"content":" Dev Ops Roadmap # Coding # progamming language bash git \u0026amp; gitflow Python Yaml\u0026amp; json formats Linux # Directory Structure Administration iptables/firewall To read # How Operating system manage processes Other programming languages Database types Network # Foundation IP, subnet, CIDR HTTP, SSL Port Forwarding Web # Nginx [web server \u0026amp; API gateway] HAproxy [loadbalancing] To read # OSI TCP SSH Network Socket Build # Build applications form different kinds [gcc,make,dotnet,..etc] Containers # chroot CGroups LXC Docker Kubernetes to read # FreeBSD Jail Kernel space User space system calls there a more in this link (DevOps Roadmap)[https://metwallylabs.com/devopsroadmap.html]\n","date":"18 March 2026","externalUrl":null,"permalink":"/blog/devops-roadmap/","section":"Blog","summary":"Comprehensive DevOps learning path from beginner to professional. Covers Linux, Git, Docker, Kubernetes, CI/CD pipelines, cloud platforms, and infrastructure as code.","title":"DevOps Roadmap - Complete Learning Path","type":"blog"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/display/","section":"Categories","summary":"","title":"Display","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/display/","section":"Tags","summary":"","title":"Display","type":"tags"},{"content":"Let me break down each part of this FFmpeg command:\nCommand Breakdown: # ffmpeg 1. Video Input (Screen Capture) # -f x11grab # Input format: X11 screen grabbing -s 1366x768 # Screen resolution: 1366 pixels wide × 768 pixels tall -i :0.0 # Input source: Display 0, Screen 0 (main screen) 2. Audio Input (Microphone) # -f pulse # Input format: PulseAudio (Linux sound server) -i \u0026#34;alsa_input.usb-Jieli_Technology_UACDemoV1.0_F584CD1399EC5853-00.mono-fallback\u0026#34; # PulseAudio device name for your USB microphone # \u0026#34;mono-fallback\u0026#34; means it\u0026#39;s a mono (single channel) device 3. Video Encoding Settings # -c:v libx264 # Video codec: H.264 (x264 encoder) -preset veryfast # Encoding speed/quality tradeoff: # ultrafast → superfast → veryfast → faster → fast # → medium → slow → slower → veryslow # \u0026#34;veryfast\u0026#34; = faster encoding, larger file size -crf 23 # Constant Rate Factor (quality): # 0 = lossless (huge files) # 18-28 = typical range # 23 = good quality (default) # Lower = better quality, larger files 4. Audio Encoding Settings # -c:a aac # Audio codec: AAC (Advanced Audio Coding) -ac 1 # Audio channels: 1 (mono) - matches your microphone -ar 44100 # Audio sample rate: 44.1kHz (CD quality) # Note: No bitrate specified, so FFmpeg uses AAC default (~128kbps for stereo) 5. Output # out.mkv # Output filename with .mkv container (Matroska) # MKV supports multiple audio tracks, subtitles, etc. What This Command Does: # Captures your entire screen (1366×768 resolution) Records audio from your USB microphone Encodes video as H.264 with \u0026ldquo;veryfast\u0026rdquo; preset (good balance) Encodes audio as AAC mono at 44.1kHz Saves everything to out.mkv file Equivalent/Alternative Options: # Add framerate (optional but recommended):\n-framerate 30 # Adds: Capture at 30 frames per second Specify audio bitrate explicitly:\n-b:a 128k # Sets audio bitrate to 128 kbps Use shorter names:\n-vcodec libx264 # Same as -c:v libx264 -acodec aac # Same as -c:a aac Add timestamp (for debugging):\n-show_pts 1 # Shows timestamps in console (debugging) Common Issues \u0026amp; Fixes: # If audio/video get out of sync:\n-async 1 # Audio sync method If you want to limit file size:\n-b:v 2000k # Video bitrate: 2000 kbps -maxrate 2500k # Maximum bitrate -bufsize 5000k # Buffer size To show progress during encoding:\n-progress pipe:1 # Shows encoding progress Example with All Common Options: # ffmpeg \\ -f x11grab -s 1366x768 -framerate 30 -i :0.0 \\ -f pulse -i \u0026#34;alsa_input.usb-Jieli_Technology_UACDemoV1.0_F584CD1399EC5853-00.mono-fallback\u0026#34; \\ -c:v libx264 -preset veryfast -crf 23 \\ -c:a aac -ac 1 -ar 44100 -b:a 128k \\ -async 1 \\ -y \\ out.mkv Where -y = overwrite output without asking\nTo Play Back the Recording: # ffplay out.mkv # or mpv out.mkv # or vlc out.mkv This command gives you a good balance of quality, file size, and encoding speed for screen recording with microphone audio.\nTo record only the audoi\nffmpeg -f pulse -i \u0026#34;alsa_input.usb-Jieli_Technology_UACDemoV1.0_F584CD1399EC5853-00.mono-fallback\u0026#34; -c:a aac -ac 1 -ar 44100 -b:a 128k -y output.m4a ffmpeg -f pulse -i \u0026#34;alsa_input.usb-Jieli_Technology_UACDemoV1.0_F584CD1399EC5853-00.mono-fallback\u0026#34; -c:a aac -b:a 256k -ac 2 -ar 48000 output.m4a ","date":"18 March 2026","externalUrl":null,"permalink":"/tutorials/ffmpeg-screen-recording/","section":"Tutorials - Linux, Android \u0026 Development Guides","summary":"Complete breakdown of FFmpeg screen recording commands. Covers video capture, pulse/alsa audio input, and encoding options for Linux.","title":"FFmpeg Screen Recording - Command Breakdown","type":"tutorials"},{"content":"This is a nice bash script for screen recording! It has some clever features. Let me explain and suggest improvements:\nCurrent Script Analysis: # What it does: # Toggles microphone mute on/off when starting/stopping Records screen to video file (lossless H.264) Records audio separately to WAV file (with noise reduction) Shows status indicator in dwmblocks Sends desktop notifications Saves PIDs to kill processes later Current Issues: # Audio/video are separate files - need to combine them later Uses ALSA default - might not capture from USB mic when plugged in No audio in video file - screen recording has no sound Lossless video (-qp 0) creates huge files Improved Version with USB Mic Support: # #!/usr/bin/env bash # Configuration - Set your USB mic device here USB_MIC=\u0026#34;alsa_input.usb-Jieli_Technology_UACDemoV1.0_F584CD1399EC5853-00.mono-fallback\u0026#34; INTERNAL_MIC=\u0026#34;alsa_input.pci-0000_00_1f.3.analog-stereo\u0026#34; record() { # Toggle on mic amixer set Capture toggle # Get screen dimensions SCREEN_DIM=$(xdpyinfo | awk \u0026#39;/dimensions/{print $2}\u0026#39;) # Check if USB mic is available, fallback to internal mic if pactl list short sources | grep -q \u0026#34;$USB_MIC\u0026#34;; then AUDIO_SOURCE=\u0026#34;$USB_MIC\u0026#34; AUDIO_CHANNELS=1 # Mono echo \u0026#34;Using USB microphone\u0026#34; else AUDIO_SOURCE=\u0026#34;$INTERNAL_MIC\u0026#34; AUDIO_CHANNELS=2 # Stereo echo \u0026#34;USB mic not found, using internal microphone\u0026#34; fi # Single file with both video and audio # Lossy compression (reasonable file size) with audio ffmpeg \\ -f x11grab -s \u0026#34;$SCREEN_DIM\u0026#34; -r 30 -i :0.0 \\ -f pulse -i \u0026#34;$AUDIO_SOURCE\u0026#34; \\ -c:v libx264 -preset veryfast -crf 23 \\ -c:a aac -ac \u0026#34;$AUDIO_CHANNELS\u0026#34; -ar 44100 -b:a 128k \\ -movflags +faststart \\ \u0026#34;$HOME/video_$(date \u0026#39;+%a__%b%d__%H_%M_%S\u0026#39;).mkv\u0026#34; \u0026amp; echo $! \u0026gt; /tmp/recpid # Optional: Separate cleaned audio file (if you want it) ffmpeg \\ -f pulse -i \u0026#34;$AUDIO_SOURCE\u0026#34; \\ -af \u0026#34;afftdn=nf=-75\u0026#34; \\ \u0026#34;$HOME/audio_cleaned_$(date \u0026#39;+%a__%b%d__%H_%M_%S\u0026#39;).wav\u0026#34; \u0026amp; echo $! \u0026gt; /tmp/audpid echo \u0026#34;Rec •\u0026#34; \u0026gt; /tmp/recordingicon \u0026amp;\u0026amp; pkill -RTMIN+3 dwmblocks notify-send -t 500 -h string:bgcolor:#a3be8c \u0026#34;Recording started \u0026amp; mic toggled\u0026#34; } end() { kill -15 \u0026#34;$(cat /tmp/recpid)\u0026#34; 2\u0026gt;/dev/null kill -15 \u0026#34;$(cat /tmp/audpid)\u0026#34; 2\u0026gt;/dev/null rm -f /tmp/recpid /tmp/audpid amixer set Capture toggle echo \u0026#34;\u0026#34; \u0026gt; /tmp/recordingicon \u0026amp;\u0026amp; pkill -RTMIN+3 dwmblocks # Optional: Combine files if you kept the separate recording approach # combine_audio_video notify-send -t 500 -h string:bgcolor:#bf616a \u0026#34;Recording ended \u0026amp; mic toggled\u0026#34; } # Optional function to combine separate audio/video files combine_audio_video() { # Find the latest video and audio files LATEST_VIDEO=$(ls -t \u0026#34;$HOME\u0026#34;/video_*.mkv 2\u0026gt;/dev/null | head -1) LATEST_AUDIO=$(ls -t \u0026#34;$HOME\u0026#34;/audio_*.wav 2\u0026gt;/dev/null | head -1) if [[ -f \u0026#34;$LATEST_VIDEO\u0026#34; \u0026amp;\u0026amp; -f \u0026#34;$LATEST_AUDIO\u0026#34; ]]; then OUTPUT=\u0026#34;${LATEST_VIDEO%.mkv}_combined.mkv\u0026#34; ffmpeg -i \u0026#34;$LATEST_VIDEO\u0026#34; -i \u0026#34;$LATEST_AUDIO\u0026#34; -c copy \u0026#34;$OUTPUT\u0026#34; echo \u0026#34;Combined file created: $OUTPUT\u0026#34; fi } # If the recording pid exists, end recording. If not, start recording ([[ -f /tmp/recpid ]] \u0026amp;\u0026amp; end \u0026amp;\u0026amp; exit 0) || record Key Improvements: # Single file output - Video and audio in one MKV file Automatic USB mic detection - Uses USB if available, falls back to internal Proper audio channels - Mono for USB mic, stereo for internal Reasonable file size - Uses CRF 23 instead of lossless Faststart for web - -movflags +faststart makes videos streamable Alternative: Keep Separate Files But Sync Them: # If you prefer separate files for editing flexibility:\n# In record() function: # Record screen with reference audio track (low quality) ffmpeg \\ -f x11grab -s \u0026#34;$SCREEN_DIM\u0026#34; -r 30 -i :0.0 \\ -f pulse -i \u0026#34;$AUDIO_SOURCE\u0026#34; \\ -c:v libx264 -preset veryfast -crf 23 \\ -c:a aac -ac \u0026#34;$AUDIO_CHANNELS\u0026#34; -ar 44100 -b:a 32k \\ \u0026#34;$HOME/video_$(date \u0026#39;+%a__%b%d__%H_%M_%S\u0026#39;).mkv\u0026#34; \u0026amp; # High quality cleaned audio separately ffmpeg \\ -f pulse -i \u0026#34;$AUDIO_SOURCE\u0026#34; \\ -af \u0026#34;afftdn=nf=-75\u0026#34; \\ -c:a pcm_s16le \\ \u0026#34;$HOME/audio_$(date \u0026#39;+%a__%b%d__%H_%M_%S\u0026#39;).wav\u0026#34; \u0026amp; Additional Features You Could Add: # # Add to record() function for region recording: region_record() { # Use slurp to select region REGION=$(slurp) ffmpeg -f x11grab -video_size \u0026#34;$REGION\u0026#34; -i \u0026#34;:0.0+${REGION%%+*}\u0026#34; ... } # Add recording timer: show_timer() { while [[ -f /tmp/recpid ]]; do DURATION=$((SECONDS - START_TIME)) printf \u0026#34;Rec %02d:%02d •\u0026#34; $((DURATION/60)) $((DURATION%60)) \u0026gt; /tmp/recordingicon pkill -RTMIN+3 dwmblocks sleep 1 done } # Call show_timer \u0026amp; after starting ffmpeg To Use the Improved Script: # Save it as ~/bin/record-screen.sh Make executable: chmod +x ~/bin/record-screen.sh Bind to a hotkey in your window manager The script will now properly use your USB microphone when it\u0026rsquo;s plugged in!\n","date":"18 March 2026","externalUrl":null,"permalink":"/tutorials/ffmpeg-screen-recording-script/","section":"Tutorials - Linux, Android \u0026 Development Guides","summary":"Guide to FFmpeg screen recording on Linux. Script breakdown for capturing desktop, microphone, and audio with real-time monitoring.","title":"FFmpeg Screen Recording Script - Linux Guide","type":"tutorials"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/file-manager/","section":"Tags","summary":"","title":"File-Manager","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/filebrowser/","section":"Tags","summary":"","title":"Filebrowser","type":"tags"},{"content":"filebrowser has many configurable options that you can use via command-line flags, environment variables, or a config file. Below is a comprehensive list of commonly used CLI flags and configuration options.\n✅ Basic filebrowser Configuration Flags # These are the most important flags when running the filebrowser binary:\nFlag Description -a, --address The IP address to bind to (default: 0.0.0.0) -p, --port The port to run the web server on (default: 8080) -d, --database Path to the .db file --root Root directory for files (default: current directory) --config Path to a JSON config file --log Enable logging to file or stdout --cert Path to TLS certificate file (for HTTPS) --key Path to TLS key file (for HTTPS) --locale Language/locale (e.g., en, fr) ✅ User Management Commands # You can manage users from CLI:\nfilebrowser users add \u0026lt;username\u0026gt; \u0026lt;password\u0026gt; [flags] filebrowser users update \u0026lt;username\u0026gt; [flags] filebrowser users rm \u0026lt;username\u0026gt; filebrowser users list User-related flags:\nFlag Description --scope User\u0026rsquo;s file access scope --locale Default language --perm.admin Give admin privileges --perm.create Allow file creation --perm.rename Allow renaming --perm.delete Allow deletion --perm.download Allow downloads --perm.share Allow sharing --perm.execute Allow command execution --perm.modify Allow modifying files --perm.view Allow viewing files --perm.preview Allow file preview ✅ Available Permissions (for --perm.*) # Permission Description admin Full access to settings and users create Create new files/folders rename Rename files/folders delete Delete files/folders download Download files share Share files with a link execute Run shell commands modify Modify files view View files in UI preview Preview files in browser ✅ TLS (HTTPS) Support # To run with HTTPS:\nfilebrowser --cert /path/to/cert.pem --key /path/to/key.pem You can generate a self-signed cert with:\nopenssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes ✅ Config File (Alternative to CLI) # You can create a JSON config file and load it with --config.\nExample: config.json\n{ \u0026#34;address\u0026#34;: \u0026#34;192.168.1.3\u0026#34;, \u0026#34;port\u0026#34;: 8080, \u0026#34;log\u0026#34;: \u0026#34;stdout\u0026#34;, \u0026#34;database\u0026#34;: \u0026#34;/srv/filebrowser/filebrowser.db\u0026#34;, \u0026#34;root\u0026#34;: \u0026#34;/srv/data\u0026#34; } Run it like this:\nfilebrowser --config /srv/filebrowser/config.json ✅ Environment Variables # You can also set settings via environment variables:\nEnvironment Variable Equivalent CLI Flag FB_ADDRESS --address FB_PORT --port FB_DATABASE --database FB_ROOT --root FB_CERT --cert FB_KEY --key ✅ Help Command # To get a full up-to-date list of flags and commands:\nfilebrowser --help Or for subcommands:\nfilebrowser users --help Would you like me to generate a default config file for you or help turn this into a systemd service?\nAh 👍 you already have the default FileBrowser settings.json (auto-generated). That’s why you see only:\n{ \u0026#34;port\u0026#34;: 80, \u0026#34;baseURL\u0026#34;: \u0026#34;\u0026#34;, \u0026#34;address\u0026#34;: \u0026#34;\u0026#34;, \u0026#34;log\u0026#34;: \u0026#34;stdout\u0026#34;, \u0026#34;database\u0026#34;: \u0026#34;/database/filebrowser.db\u0026#34;, \u0026#34;root\u0026#34;: \u0026#34;/srv\u0026#34; } This is the basic config (port, db path, root folder). If you want user registration (signup), you need to expand this file to include extra keys (like I showed before).\nHere’s a merged example (keeping your current values + adding signup support):\n{ \u0026#34;port\u0026#34;: 80, \u0026#34;baseURL\u0026#34;: \u0026#34;\u0026#34;, \u0026#34;address\u0026#34;: \u0026#34;\u0026#34;, \u0026#34;log\u0026#34;: \u0026#34;stdout\u0026#34;, \u0026#34;database\u0026#34;: \u0026#34;/database/filebrowser.db\u0026#34;, \u0026#34;root\u0026#34;: \u0026#34;/srv\u0026#34;, \u0026#34;signup\u0026#34;: true, \u0026#34;createUserDir\u0026#34;: true, \u0026#34;branding\u0026#34;: { \u0026#34;name\u0026#34;: \u0026#34;My FileBrowser\u0026#34;, \u0026#34;disableExternal\u0026#34;: false }, \u0026#34;defaults\u0026#34;: { \u0026#34;scope\u0026#34;: \u0026#34;/srv\u0026#34;, \u0026#34;locale\u0026#34;: \u0026#34;en\u0026#34;, \u0026#34;viewMode\u0026#34;: \u0026#34;list\u0026#34;, \u0026#34;singleClick\u0026#34;: false, \u0026#34;sorting\u0026#34;: { \u0026#34;by\u0026#34;: \u0026#34;name\u0026#34;, \u0026#34;asc\u0026#34;: true }, \u0026#34;perm\u0026#34;: { \u0026#34;admin\u0026#34;: false, \u0026#34;execute\u0026#34;: true, \u0026#34;create\u0026#34;: true, \u0026#34;rename\u0026#34;: true, \u0026#34;modify\u0026#34;: true, \u0026#34;delete\u0026#34;: true, \u0026#34;share\u0026#34;: true, \u0026#34;download\u0026#34;: true } } } 🔹 Steps # Edit your config/settings.json and replace contents with the above.\nEnsure permissions are correct:\nsudo chown 1000:1000 /home/youcef/docker_app/filebrowser/config/settings.json Restart container:\ndocker-compose down docker-compose up -d Now when you go to http://192.168.1.6:8080, you should see a Sign Up button.\nSecurity note: this makes registration open for anyone on your LAN.\n","date":"18 March 2026","externalUrl":null,"permalink":"/tutorials/filebrowser-configuration/","section":"Tutorials - Linux, Android \u0026 Development Guides","summary":"Complete reference for filebrowser configuration. Covers all CLI flags, configuration file options, and environment variables for self-hosted file browser.","title":"Filebrowser Configuration Guide - Complete Reference","type":"tutorials"},{"content":"It looks like you\u0026rsquo;re having an issue where when you plug in your USB microphone (UACDemoV10), your system switches to it as the default output device, causing no sound from your speakers. Here\u0026rsquo;s how to fix this:\nSolution 1: Set Correct Default Device (PulseAudio) # # List PulseAudio sources and sinks pacmd list-sinks pacmd list-sources # Set your internal sound card as default output pacmd set-default-sink alsa_output.pci-0000_00_1f.3.analog-stereo # Set USB microphone as default input only pacmd set-default-source alsa_input.usb-0c76_UACDemoV1.0-00.analog-stereo Solution 2: Create PulseAudio Configuration File # Create or edit ~/.config/pulse/default.pa:\n# Set internal sound card as default set-default-sink alsa_output.pci-0000_00_1f.3.analog-stereo set-default-source alsa_input.usb-0c76_UACDemoV1.0-00.analog-stereo Solution 3: Use ALSA Configuration (More Permanent) # Edit /etc/asound.conf or ~/.asoundrc:\n# Add these lines defaults.pcm.card 0 defaults.pcm.device 0 defaults.ctl.card 0 pcm.!default { type plug slave { pcm \u0026#34;hw:0,0\u0026#34; } } ctl.!default { type hw card 0 } Solution 4: Quick Fix via pavucontrol (GUI) # # Install if not already installed sudo apt install pavucontrol # Ubuntu/Debian sudo pacman -S pavucontrol # Arch sudo dnf install pavucontrol # Fedora # Then run: pavucontrol In pavucontrol:\nGo to \u0026ldquo;Configuration\u0026rdquo; tab Set internal sound card to \u0026ldquo;Analog Stereo Duplex\u0026rdquo; Set USB microphone to \u0026ldquo;Analog Mono Input\u0026rdquo; (or similar) Go to \u0026ldquo;Output Devices\u0026rdquo; tab and select your internal sound card Solution 5: Temporary Workaround # When you need to use the USB microphone:\n# For recording with USB mic arecord -D plughw:1,0 -f cd test.wav # For playback through internal sound card aplay -D plughw:0,0 test.wav To permanently prevent the USB device from becoming default output: # Create a udev rule:\nsudo nano /etc/udev/rules.d/85-usb-audio.rules Add:\nACTION==\u0026#34;add\u0026#34;, SUBSYSTEM==\u0026#34;sound\u0026#34;, ATTRS{idVendor}==\u0026#34;0c76\u0026#34;, ATTRS{idProduct}==\u0026#34;161e\u0026#34;, ENV{PULSE_PROFILE_SET}=\u0026#34;off\u0026#34; Then reload:\nsudo udevadm control --reload-rules Would you like me to help you identify the exact PulseAudio device names for your system, or would you prefer one of these specific solutions?\nIf you use those exact commands, you might run into issues because:\nThose device names are likely different on your system The USB device might not support stereo output (it\u0026rsquo;s a microphone) Let\u0026rsquo;s first check your actual PulseAudio device names:\n# List all sinks (output devices) pactl list short sinks # List all sources (input devices) pactl list short sources # Alternatively, get more detailed info pacmd list-sinks | grep -E \u0026#34;name:|device.description\u0026#34; pacmd list-sources | grep -E \u0026#34;name:|device.description\u0026#34; Run these commands and share the output. You should see something like:\nFor sinks (outputs):\nalsa_output.pci-0000_00_1f.3.analog-stereo alsa_output.usb-0c76_UACDemoV1.0-00.analog-stereo For sources (inputs):\nalsa_input.pci-0000_00_1f.3.analog-stereo alsa_input.usb-0c76_UACDemoV1.0-00.analog-mono Based on your setup, here\u0026rsquo;s what you should do: # Step 1: Create the config file:\nmkdir -p ~/.config/pulse nano ~/.config/pulse/default.pa Step 2: Add these lines (after checking your actual device names):\n### Automatically restore the volume of streams and devices load-module module-stream-restore load-module module-device-restore ### Make sure internal sound card is default for OUTPUT set-default-sink alsa_output.pci-0000_00_1f.3.analog-stereo ### Make sure USB mic is default for INPUT set-default-source alsa_input.usb-0c76_UACDemoV1.0-00.analog-mono ### Optional: Prevent PulseAudio from switching defaults when USB is plugged in load-module module-switch-on-connect blacklist=\u0026#34;regex:^.*UACDemo.*sink.*$\u0026#34; Step 3: If the exact names don\u0026rsquo;t work, you can use index numbers:\n# Get the index numbers pactl list short sinks # Output might look like: # 0\talsa_output.pci-0000_00_1f.3.analog-stereo # 1\talsa_output.usb-0c76_UACDemoV1.0-00.analog-stereo pactl list short sources # Output might look like: # 0\talsa_input.pci-0000_00_1f.3.analog-stereo # 1\talsa_input.usb-0c76_UACDemoV1.0-00.analog-mono Then in your default.pa:\n# Set by index (0 = first sink, usually internal sound card) set-default-sink 0 set-default-source 1 Step 4: Restart PulseAudio:\npulseaudio -k # Wait a moment, it will auto-restart # Or force restart: pulseaudio --start Important Notes: # USB microphones often don\u0026rsquo;t have output capability - PulseAudio might incorrectly think they do. The module-switch-on-connect line helps prevent this.\nCheck if the USB device appears as both sink and source:\npactl list short sinks | grep UACDemo pactl list short sources | grep UACDemo If the USB device shows as a sink, you might want to disable it as an output:\n# Find the sink index for USB pactl list short sinks | grep UACDemo # Output: 1\talsa_output.usb-0c76_UACDemoV1.0-00.analog-stereo # Disable it pactl set-sink-port 1 off ","date":"18 March 2026","externalUrl":null,"permalink":"/tutorials/fix-sound-usb-microphone-linux/","section":"Tutorials - Linux, Android \u0026 Development Guides","summary":"Guide to fixing audio device switching on Linux. Prevent system from switching to USB microphone as default output. Uses PulseAudio and ALSA configuration.","title":"Fix Sound Switching to USB Microphone on Linux","type":"tutorials"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/hdmi/","section":"Tags","summary":"","title":"Hdmi","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/install/","section":"Tags","summary":"","title":"Install","type":"tags"},{"content":"Manual package download and install:\nDownload the package manually # curl -O https://repo-fastly.voidlinux.org/current/clang19-headers-19.1.4_8.x86_64.xbps xbps-rindex -a *.xbps xbps-install --repository=$PWD pkgname ","date":"18 March 2026","externalUrl":null,"permalink":"/linux/install-local-xbps-packages/","section":"Linux Knowledge Base","summary":"Guide to installing downloaded XBPS packages on Void Linux manually. Uses xbps-rindex to index packages and xbps-install to install locally.","title":"Install Local XBPS Packages on Void Linux","type":"linux"},{"content":"Got it 👍 You have everything needed to install Windows XP SP3 with virtio drivers.\nI’ll give you two correct commands using exactly those files, then short install steps.\n✅ OPTION 1 (RECOMMENDED): Stable \u0026amp; easy (IDE + e1000) # Uses no virtio, simplest and most reliable.\nqemu-system-i386 \\ -machine pc,accel=kvm \\ -cpu pentium3 \\ -m 1024 \\ -drive file=winxp.qcow2,if=ide \\ -cdrom en_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73974.iso \\ -boot d \\ -vga std \\ -usb -device usb-tablet \\ -nic user,model=e1000 \\ -monitor stdio Install steps # Boot → XP installer starts Enter key from key.txt Finish install Done ✅ (network works automatically) ✅ OPTION 2: q35 + virtio (advanced, your files match this) # Uses:\nxp_q35_x86.img → floppy drivers (setup) virtio-win-0.1.285.iso → full drivers (after install) qemu-system-i386 \\ -machine q35,accel=kvm \\ -cpu qemu32 \\ -m 2048 \\ -global q35-pcihost.x-pci-hole64-fix=false \\ -drive file=winxp.qcow2,if=virtio \\ -drive if=floppy,file=xp_q35_x86.img,format=raw \\ -cdrom en_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73974.iso \\ -device VGA,vgamem_mb=64 \\ -usb -device usb-tablet \\ -nic user,model=virtio \\ -monitor stdio Install steps (IMPORTANT) # XP setup starts\nWhen it asks for storage → load driver from floppy\nSelect VirtIO Block Driver (XP 32-bit)\nContinue installation\nAfter desktop loads:\nqemu-system-i386 ... -cdrom virtio-win-0.1.285.iso Install Network + Balloon drivers\n🔑 Notes # key.txt → only for manual typing RAM must stay ≤ 2GB XP + q35 can freeze → Option 1 is safer -cpu host ❌ don’t use it with i386 qemu-system-i386 -M q35,usb=on,acpi=on,hpet=off -global q35-pcihost.x-pci-hole64-fix=false -m 4G -cpu host -accel kvm -drive if=virtio,file=winxp.qcow2 -drive if=floppy,file=xp_q35_x86.img,format=raw -device usb-tablet -device VGA,vgamem_mb=64 -nic user,model=virtio -monitor stdio -cdrom en_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73974.iso -boot d ","date":"18 March 2026","externalUrl":null,"permalink":"/linux/install-windows-xp-qemu/","section":"Linux Knowledge Base","summary":"Complete guide to installing Windows XP on QEMU. Covers boot configuration, virtio drivers, network setup, and troubleshooting.","title":"Install Windows XP on QEMU - Complete Guide","type":"linux"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/kubernetes/","section":"Tags","summary":"","title":"Kubernetes","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/libmount/","section":"Tags","summary":"","title":"Libmount","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/linux-audio/","section":"Tags","summary":"","title":"Linux-Audio","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/local-package/","section":"Tags","summary":"","title":"Local-Package","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/mount/","section":"Tags","summary":"","title":"Mount","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/multi-monitor/","section":"Tags","summary":"","title":"Multi-Monitor","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/package-install/","section":"Tags","summary":"","title":"Package-Install","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/recording/","section":"Categories","summary":"","title":"Recording","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/recording/","section":"Tags","summary":"","title":"Recording","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/rsync/","section":"Tags","summary":"","title":"Rsync","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/runit/","section":"Categories","summary":"","title":"Runit","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/runit/","section":"Tags","summary":"","title":"Runit","type":"tags"},{"content":" Basic Usage # To start service # sv up \u0026lt;services\u0026gt; To stop service # sv down \u0026lt;services\u0026gt; To restart service # sv restart \u0026lt;services\u0026gt; To get status of a service # sv status \u0026lt;services\u0026gt; To get status about all serverces # sv status /var/service/* Enabling a sevices # ln -s /etc/sv/\u0026lt;service\u0026gt; /var/service/ To start a service on boot # ln -s /etc/sv/\u0026lt;service\u0026gt; /etc/runit/runsvdir/default/ To Disable A Service # Remove the symlink from the running runsvdir\nrm /var/service/\u0026lt;service\u0026gt; If the service is in default # rm /etc/runit/runsvdir/default/\u0026lt;service\u0026gt; ","date":"18 March 2026","externalUrl":null,"permalink":"/linux/runit-service-management-void-linux/","section":"Linux Knowledge Base","summary":"Complete guide to Runit service management on Void Linux. Covers sv up, down, restart, status, and service enabling/disabling.","title":"Runit Service Management on Void Linux","type":"linux"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/scp/","section":"Tags","summary":"","title":"Scp","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/screen-recording/","section":"Tags","summary":"","title":"Screen-Recording","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/script/","section":"Tags","summary":"","title":"Script","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/self-hosted/","section":"Categories","summary":"","title":"Self-Hosted","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/self-hosted/","section":"Tags","summary":"","title":"Self-Hosted","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/service-management/","section":"Tags","summary":"","title":"Service-Management","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/sftp/","section":"Tags","summary":"","title":"Sftp","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/software-development/","section":"Categories","summary":"","title":"Software Development","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/sound-fix/","section":"Tags","summary":"","title":"Sound-Fix","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/source/","section":"Tags","summary":"","title":"Source","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/sql/","section":"Tags","summary":"","title":"Sql","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/sqlite/","section":"Tags","summary":"","title":"Sqlite","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/categories/ssh/","section":"Categories","summary":"","title":"SSH","type":"categories"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/sshfs/","section":"Tags","summary":"","title":"Sshfs","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/sv/","section":"Tags","summary":"","title":"Sv","type":"tags"},{"content":"Thanks for sharing the detailed content from Linux Handbook! Here\u0026rsquo;s a concise summary of the key methods discussed for uploading and downloading files over SSH:\n✅ Summary: Upload Files to Remote System Over SSH # 1. scp (Secure Copy) — Easy but Deprecated # Upload:\nscp filename username@ip:/home/username/ Download:\nscp username@ip:/home/username/filename . Copy directories (add -r):\nscp -r dir username@ip:/home/username/ 2. rsync — Reliable and Powerful # Upload:\nrsync filename username@ip:/home/username/ Download:\nrsync username@ip:/home/username/filename . Directories (add -r):\nrsync -r dir username@ip:/home/username/ 3. sshfs — Mount Remote Filesystem # Install:\nsudo apt install sshfs Mount:\nmkdir mount_dir sshfs username@ip:/remote/path mount_dir Unmount:\numount mount_dir 4. GUI: FileZilla (SFTP Client) # Easy drag-and-drop interface. Configure via File \u0026gt; Site Manager. Enter SSH/SFTP details (IP, port, username, password). Remote on right, local on left — transfer with drag-and-drop. ","date":"18 March 2026","externalUrl":null,"permalink":"/linux/ssh-file-transfer-methods/","section":"Linux Knowledge Base","summary":"Complete guide to file transfer over SSH. Covers scp, rsync, sshfs mounting, and FileZilla SFTP client for secure file sharing.","title":"Transfer Files Over SSH - scp, rsync, sshfs Guide","type":"linux"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/usb-microphone/","section":"Tags","summary":"","title":"Usb-Microphone","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/util-linux/","section":"Tags","summary":"","title":"Util-Linux","type":"tags"},{"content":"","date":"18 March 2026","externalUrl":null,"permalink":"/tags/xrandr/","section":"Tags","summary":"","title":"Xrandr","type":"tags"},{"content":"","date":"6 November 2025","externalUrl":null,"permalink":"/categories/guide/","section":"Categories","summary":"","title":"Guide","type":"categories"},{"content":"To get a MediaTek 802.11n WLAN adapter working on Alpine Linux, you\u0026rsquo;ll typically need to install firmware and drivers for the wireless chipset, and bring up the network interface using tools like iw and wpa_supplicant.\nwifi adapter Step-by-Step Guide # 1. Identify Your Chipset # Run the following to identify your MediaTek Wi-Fi chipset:\nlspci | grep -i network # or for USB dongles: lsusb Look for lines like:\nMediaTek MT7601U 802.11 n WLAN Adapter 2. Enable Community Repository # Make sure the community repo is enabled in /etc/apk/repositories:\nvi /etc/apk/repositories Uncomment or add this line:\nhttp://dl-cdn.alpinelinux.org/alpine/latest-stable/community Then update:\napk update 3. Install Required Packages # Install drivers, firmware, and Wi-Fi tools:\napk add linux-firmware wireless-tools iw wpa_supplicant 4. Check if the Driver is Loaded # Run:\ndmesg | grep mt lsmod | grep mt You may need one of these kernel modules:\nmt7601u mt76x0u mt76 To load a module manually:\nmodprobe mt7601u Check if the interface appears:\nip link You should see something like wlan0.\nConnect to Wi-Fi (wpa_supplicant method) # Create /etc/wpa_supplicant/wpa_supplicant.conf:\nctrl_interface=/var/run/wpa_supplicant network={ ssid=\u0026#34;YourNetworkName\u0026#34; psk=\u0026#34;YourPassword\u0026#34; } Then start wpa_supplicant:\nwpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf Get an IP:\nudhcpc -i wlan0 Tips # For headless systems, use wpa_cli or configure wpa_supplicant.conf manually. For GUI systems (with X or Wayland), you can use networkmanager or connman. Check logs via: dmesg | tail For Persistent Setup # To ensure Wi-Fi connects at boot:\nAdd wpa_supplicant and udhcpc to OpenRC: rc-update add wpa_supplicant rc-update add networking Ensure wpa_supplicant.conf is correctly placed and permissions are set. Not Working? # If it\u0026rsquo;s not working :\nCheck dmesg for errors. sudo dmesg Your chipset might need an out-of-tree driver (rare on Alpine). ","date":"6 November 2025","externalUrl":null,"permalink":"/tutorials/setup-wireless-adapter-on-alpine-linux-with-wpa-supplicant-/","section":"Tutorials - Linux, Android \u0026 Development Guides","summary":"Get a MediaTek or other USB WiFi adapter working on Alpine Linux using wpa_supplicant — step-by-step from driver install to boot persistence.","title":"How to Setup WiFi on Alpine Linux with wpa_supplicant","type":"tutorials"},{"content":"","date":"6 November 2025","externalUrl":null,"permalink":"/tags/wifi/","section":"Tags","summary":"","title":"Wifi","type":"tags"},{"content":"","date":"6 November 2025","externalUrl":null,"permalink":"/tags/wireless/","section":"Tags","summary":"","title":"Wireless","type":"tags"},{"content":"","date":"6 November 2025","externalUrl":null,"permalink":"/tags/wpa-supplicant/","section":"Tags","summary":"","title":"Wpa-Supplicant","type":"tags"},{"content":"","date":"29 August 2025","externalUrl":null,"permalink":"/categories/editor/","section":"Categories","summary":"","title":"Editor","type":"categories"},{"content":"","date":"29 August 2025","externalUrl":null,"permalink":"/tags/editor/","section":"Tags","summary":"","title":"Editor","type":"tags"},{"content":"","date":"29 August 2025","externalUrl":null,"permalink":"/tags/text-editor/","section":"Tags","summary":"","title":"Text-Editor","type":"tags"},{"content":"","date":"29 August 2025","externalUrl":null,"permalink":"/categories/vim/","section":"Categories","summary":"","title":"Vim","type":"categories"},{"content":"","date":"29 August 2025","externalUrl":null,"permalink":"/tags/vim/","section":"Tags","summary":"","title":"Vim","type":"tags"},{"content":"","date":"29 August 2025","externalUrl":null,"permalink":"/tags/vim-files/","section":"Tags","summary":"","title":"Vim-Files","type":"tags"},{"content":"","date":"29 August 2025","externalUrl":null,"permalink":"/tags/vim-tabs/","section":"Tags","summary":"","title":"Vim-Tabs","type":"tags"},{"content":" Into # What\u0026rsquo;s going on guys youcef here and today we work with files and tabs in vim .as well as how to open and save files in different ways .\nVim does have tabs just like many other text editors do and to deal with the tabs we have to use command though as you kow there\u0026rsquo;s no button to just click on to open new tab and the way that we would open new tab in vim .\nOpen new tab # Is of course using a command so we need our : from normal mode and the command is :tabnew which will go ahead and open a new tab to the right of whatever the last tab that you were just working with was.\nNavigate between tabs # In order to navigate between these tabs so we can do :tabprevious to go back to the prevoius tab and we can do :tabnext to go back to the next tab we can also abbreviate these command a little bit by useing :tabp and :tabn . but went you use this command the name of new tab is no name and this is because there isn\u0026rsquo;t actualy any file open here doesn\u0026rsquo;t actualy have a file name yet . what if we start inputting some text here and then you want it to save this but you wanted to also be able to give it file name .\nSave File # well the command to save is : write in order to give it a name we simply have to do is to hit space and then filename for example :write filename.txt or:w filename.txt.\nOpen file in vim # We are inside of vim we can open up a file from inside of here the command for us to do that is :edit [filename]by the way edit can be shortened to just the latter :e . to show all different files in the directory we write :e [hit tab button] and this going to output all of the file that are in that current directory .\nMultiple Vim tabs # If you have open multipe tabs and you do not went to do tabp three times in order to do that simplly : tabfirst and this automaticlly jump us back to first tab and the opposite in :tablast .\nWe can move our tabs around as well the command for that is :tabmove [numbre for where you want it to go] and postions start at 0 like in programming.\nQuit vim # And to quit vim you need only to type:q to save and quit :wq and quit without saveing :q!\n","date":"29 August 2025","externalUrl":null,"permalink":"/tutorials/vim-files-tabs-guide/","section":"Tutorials - Linux, Android \u0026 Development Guides","summary":"Guide to working with files and tabs in Vim. Covers opening files, saving, tab management, and multiple file workflows in the vim text editor.","title":"Working with Files and Tabs in Vim - Complete Guide","type":"tutorials"},{"content":"","date":"17 August 2025","externalUrl":null,"permalink":"/tags/android-x86/","section":"Tags","summary":"","title":"Android-X86","type":"tags"},{"content":"","date":"17 August 2025","externalUrl":null,"permalink":"/tags/blissos/","section":"Tags","summary":"","title":"Blissos","type":"tags"},{"content":"","date":"17 August 2025","externalUrl":null,"permalink":"/tags/grub/","section":"Tags","summary":"","title":"Grub","type":"tags"},{"content":" Manual Installation of Bliss OS on Linux # Bliss OS running on Linux after a successful manual GRUB installation ⏱ Estimated time: ~20 minutes | 🔧 Difficulty: Intermediate | ✅ Tested on: Ubuntu, Void Linux (x86_64)\nWhat is Bliss OS? # Bliss OS is a powerful Android x86 operating system designed to run natively on PCs and laptops. Unlike an emulator such as Android Studio AVD or Genymotion, Bliss OS boots directly from your GRUB menu and runs Android on bare metal — giving you full hardware performance without virtualization overhead.\nIt is built on top of the Android-x86 project and maintained by the BlissROM team. You can use it to run Android apps directly on your Linux PC, test apps in a real Android environment, or just experience Android on desktop hardware.\nWhy install Bliss OS manually instead of using a USB? The USB installer method creates a separate boot partition. The manual GRUB method covered here is cleaner for Linux users: you extract the ISO to a directory on your existing filesystem and add a GRUB entry — no repartitioning, no USB drive needed.\nWarning: Not all apps you install on Bliss OS will work smoothly. Apps that rely heavily on sensors (GPS, gyroscope) or Widevine DRM (Netflix, Disney+) may not function correctly. Step 1 — Download the ISO # Go to the official download page: BlissOS-x86 on SourceForge\nChoosing the Right Bliss OS Version # Bliss OS releases are tied to Android versions. Here is a quick reference:\nVersion Android Version API Level BlissOS 16 Android 14 (Upside Down Cake) 34 BlissOS 15 Android 13 (Tiramisu) 33 BlissOS 14 Android 12 (Snow Cone) 31 BlissOS Zenith Android 10 (Q) 29 Recommended: BlissOS 16 (Android 14) unless you need a specific API level for app compatibility.\nGApps vs FOSS — Which Variant to Download? # Feature GApps Variant FOSS Variant Google Play Store ✅ Pre-installed ❌ Not included Google Services ✅ Play Services, GMS ❌ Open-Source Focus ❌ Includes proprietary apps ✅ FOSS apps only Alternative Stores ❌ Play Store is primary ✅ F-Droid, Aurora Store MicroG Support ❌ ⚠️ Optional / user-installed Privacy 🔻 Lower (Google telemetry) 🔺 Higher (no tracking) GApps Variant # Includes Google Play Store, Gmail, YouTube, Maps, Drive, and Google Mobile Services (GMS). Required for apps that depend on Google APIs such as banking apps and most games.\nBest for: Users who need full Android app compatibility and rely on the Google ecosystem.\nLook for filenames labeled GApps, with GMS, or Google Play. Example: BlissOS-16-x86_64-GApps-*.iso\nFOSS Variant # Ships with no proprietary Google apps. Comes with open-source alternatives: F-Droid and Aurora Store as app stores, and optionally MicroG as a lightweight Google Services replacement.\nBest for: Privacy-focused users and devices with limited resources.\nLook for filenames labeled FOSS, without GApps, or vanilla. Example: BlissOS-16-x86_64-FOSS-*.iso\nFor this guide I use the GApps variant: Bliss-v16.9.4-x86_64-OFFICIAL-gapps-20240220.iso\nStep 2 — Requirements # Before starting, make sure you have:\nA Linux system with x86_64 architecture At least 4 GB of RAM (8 GB recommended for a smooth experience) GRUB as your bootloader (GRUB 2) p7zip installed (sudo apt install p7zip-full on Debian/Ubuntu, sudo xbps-install p7zip on Void Linux) The root partition formatted as ext4 (see the note on NTFS in Step 3) Step 3 — Extract the ISO and Set Up the Directory # 1. Create the Bliss OS directory at the root of your filesystem:\nsudo mkdir /blissos 2. Extract the ISO using 7z:\n7z x Bliss-v16.9.4-x86_64-OFFICIAL-gapps-20240220.iso 3. Copy the boot files to /blissos:\nsudo cp initrd.img ramdisk.img kernel /blissos/ These three files are what GRUB needs to boot Bliss OS:\nkernel — the Android-x86 Linux kernel initrd.img — the initial RAM disk that loads the Android environment ramdisk.img — the Android root filesystem loaded into RAM at boot 4. Create the data directory and generate the data image:\nsudo mkdir /blissos/data cd /blissos/data sudo dd if=/dev/zero of=data.img bs=1 count=0 seek=8G sudo mkfs.ext4 -F data.img The data.img file acts as Android\u0026rsquo;s internal storage — it stores your apps, settings, and user data. The dd command creates a sparse 8 GB file without actually writing 8 GB to disk.\nNote on NTFS / non-ext4 filesystems: The /blissos/data directory approach only works on ext4 partitions. If your root filesystem is NTFS, btrfs, or you are experiencing a boot loop, you must use the data.img method shown above instead of a bare directory.\nStep 4 — Add the GRUB Menu Entry # Open /etc/grub.d/40_custom with a text editor as root:\nsudo nano /etc/grub.d/40_custom Add the following entries at the bottom of the file:\nmenuentry \u0026#34;BlissOS (Default) w/ FFMPEG\u0026#34; { set SOURCE_NAME=\u0026#34;blissos\u0026#34; search --set=root --file /$SOURCE_NAME/kernel linux /$SOURCE_NAME/kernel FFMPEG_CODEC=1 FFMPEG_PREFER_C2=1 quiet root=/dev/ram0 SRC=/$SOURCE_NAME initrd /$SOURCE_NAME/initrd.img } menuentry \u0026#34;BlissOS (Intel GPU) w/ FFMPEG\u0026#34; { set SOURCE_NAME=\u0026#34;blissos\u0026#34; search --set=root --file /$SOURCE_NAME/kernel linux /$SOURCE_NAME/kernel HWC=drm_minigbm_celadon GRALLOC=minigbm FFMPEG_CODEC=1 FFMPEG_PREFER_C2=1 quiet root=/dev/ram0 SRC=/$SOURCE_NAME initrd /$SOURCE_NAME/initrd.img } menuentry \u0026#34;BlissOS PC-Mode (Default)\u0026#34; { set SOURCE_NAME=\u0026#34;blissos\u0026#34; search --set=root --file /$SOURCE_NAME/kernel linux /$SOURCE_NAME/kernel quiet root=/dev/ram0 SRC=/$SOURCE_NAME initrd /$SOURCE_NAME/initrd.img } menuentry \u0026#34;BlissOS PC-Mode (Intel GPU)\u0026#34; { set SOURCE_NAME=\u0026#34;blissos\u0026#34; search --set=root --file /$SOURCE_NAME/kernel linux /$SOURCE_NAME/kernel PC_MODE=1 HWC=drm_minigbm_celadon GRALLOC=minigbm FFMPEG_CODEC=1 FFMPEG_PREFER_C2=1 quiet root=/dev/ram0 SRC=/$SOURCE_NAME initrd /$SOURCE_NAME/initrd.img } What Do These Kernel Parameters Mean? # Parameter What It Does SRC=/blissos Tells Android-x86 where to find its system files root=/dev/ram0 Boots Android from RAM (standard for Android-x86) FFMPEG_CODEC=1 Enables hardware-accelerated video decoding via FFmpeg FFMPEG_PREFER_C2=1 Uses the newer Codec 2.0 API for better media performance HWC=drm_minigbm_celadon Sets the Hardware Composer for Intel GPUs GRALLOC=minigbm Uses the minigbm graphics memory allocator (required for Intel) PC_MODE=1 Enables PC-style window management (taskbar, resizable windows) quiet Suppresses kernel boot messages for a cleaner boot screen Which entry should you use?\nDefault entries — try these first on AMD/NVIDIA systems or if you are unsure Intel GPU entries — use these if you have an Intel integrated GPU (most laptops) PC-Mode — adds a taskbar and resizable app windows, closer to a desktop experience Step 5 — Update GRUB and Reboot # Update your GRUB configuration:\nsudo update-grub You should see a line like Found BlissOS (Default) w/ FFMPEG in the output, confirming GRUB detected the new entries.\nReboot your system:\nsudo reboot At the GRUB menu, select your preferred Bliss OS entry. The first boot takes 1–2 minutes while Android initializes. You will then go through the standard Android setup wizard. If you chose the GApps variant, sign into your Google account to access the Play Store.\nTroubleshooting # Black screen after selecting Bliss OS in GRUB # Try the Intel GPU entry if you are on Intel integrated graphics Add nomodeset to the kernel parameters to disable KMS: edit the line starting with linux in 40_custom and append nomodeset before quiet Make sure kernel, initrd.img, and ramdisk.img are all present in /blissos/ Boot loop (keeps restarting Android) # This is almost always a data partition issue. Make sure you created data.img correctly:\nsudo ls -lh /blissos/data/data.img If the file is missing or 0 bytes, recreate it:\nsudo dd if=/dev/zero of=/blissos/data/data.img bs=1 count=0 seek=8G sudo mkfs.ext4 -F /blissos/data/data.img GRUB does not show the Bliss OS entries # Run sudo update-grub again and look at the output. If the entries are not found, check that the file /blissos/kernel exists and that /etc/grub.d/40_custom is executable:\nsudo chmod +x /etc/grub.d/40_custom sudo update-grub Touchpad / mouse not working inside Bliss OS # Add INPUT_FIXES=1 to the kernel parameters line in your GRUB entry.\nApps crashing or not installing # Some Play Store apps block x86 devices. Install Aurora Store from within Bliss OS to bypass device checks, or use ADB sideloading.\nVerify It\u0026rsquo;s Working # Once Bliss OS boots successfully, confirm everything is working:\nDisplay — the screen should render at your native resolution. If it looks stretched, go to Settings → Display → Screen Resolution. Network — open the browser and load a webpage. Wi-Fi should work out of the box if your card is supported. Google Play (GApps variant) — sign in and install a test app. Video playback — play a YouTube video to confirm FFmpeg hardware decoding is active (smooth 1080p without high CPU usage). Summary # You now have Bliss OS installed on your Linux PC without a USB drive or repartitioning. The key steps were: extracting the ISO to /blissos, creating a data.img for persistent Android storage, and adding GRUB entries with the right kernel parameters for your GPU.\nIf you run into issues not covered here, the BlissOS XDA thread and the official BlissOS Telegram group are the best places to get help.\n","date":"17 August 2025","externalUrl":null,"permalink":"/tutorials/install-bliss-os-linux/","section":"Tutorials - Linux, Android \u0026 Development Guides","summary":"Manual installation guide for Bliss OS on Linux. Covers ISO download, GRUB configuration, data partition setup, kernel boot parameters, and common troubleshooting steps.","title":"Install Bliss OS on Linux: Step-by-Step GRUB Guide (2025)","type":"tutorials"},{"content":"","date":"17 August 2025","externalUrl":null,"permalink":"/tags/pc/","section":"Tags","summary":"","title":"Pc","type":"tags"},{"content":"","date":"16 August 2025","externalUrl":null,"permalink":"/tags/dwm/","section":"Tags","summary":"","title":"Dwm","type":"tags"},{"content":" How to install and configer Dwm on void linux # Why Dwm # dwm (Dynamic Window Manager) is a minimalistic, lightweight window manager for X11. It has very few dependencies since it\u0026rsquo;s designed to be simple and efficient.\nDependencies # first you should have all this Dependencies:\ngit wget Xlib,libX11-devel libXinerama-devel freetype-devel make gcc libXft-devel libXrandr-devel Installtion # After installing dependencies, you can clone, configure, and build dwm ,st and dmenu:\nInstall Dwm # mkdir programs cd programs # INSTALL dWM git clone https://git.suckless.org/dwm cd dwm sudo make clean install Install ST # git clone https://git.suckless.org/st cd st sudo make clean install cd .. Install dmenu # #INSTALL dmenu (like a program launcher) git clone https://git.suckless.org/dmenu cd dmenu sudo make clean install after that you have a minmal system with dwm\n","date":"16 August 2025","externalUrl":null,"permalink":"/tutorials/install-dwm-st-void-linux/","section":"Tutorials - Linux, Android \u0026 Development Guides","summary":"Guide to installing DWM (Dynamic Window Manager) and ST terminal on Void Linux. Covers build from source, patches, and configuration.","title":"Install DWM and ST on Void Linux - Suckless Tools","type":"tutorials"},{"content":"","date":"16 August 2025","externalUrl":null,"permalink":"/tags/st/","section":"Tags","summary":"","title":"St","type":"tags"},{"content":"","date":"16 August 2025","externalUrl":null,"permalink":"/tags/suckless/","section":"Tags","summary":"","title":"Suckless","type":"tags"},{"content":"","date":"15 August 2025","externalUrl":null,"permalink":"/tags/-void-linux/","section":"Tags","summary":"","title":" Void-Linux","type":"tags"},{"content":"","date":"15 August 2025","externalUrl":null,"permalink":"/blog/","section":"Blog","summary":"Comprehensive blog posts section with tested guides on Linux administration, distro installations, virtualization, Android custom ROMs, development tools, and productivity tips.","title":"Blog","type":"blog"},{"content":"","date":"15 August 2025","externalUrl":null,"permalink":"/categories/blog/","section":"Categories","summary":"","title":"Blog","type":"categories"},{"content":"","date":"15 August 2025","externalUrl":null,"permalink":"/tags/blog/","section":"Tags","summary":"","title":"Blog","type":"tags"},{"content":"","date":"15 August 2025","externalUrl":null,"permalink":"/tags/guide/","section":"Tags","summary":"","title":"Guide","type":"tags"},{"content":"","date":"15 August 2025","externalUrl":null,"permalink":"/tags/how-to/","section":"Tags","summary":"","title":"How-To","type":"tags"},{"content":" Linux # ","date":"15 August 2025","externalUrl":null,"permalink":"/linux/","section":"Linux Knowledge Base","summary":"Your complete Linux knowledge base with tutorials on system administration, QEMU virtualization, Void Linux, Alpine Linux, networking, iptables, shell scripting, and Linux kernel concepts.","title":"Linux Knowledge Base","type":"linux"},{"content":"","date":"15 August 2025","externalUrl":null,"permalink":"/categories/tutorials/","section":"Categories","summary":"","title":"Tutorials","type":"categories"},{"content":" Tutorials – My Role \u0026amp; What to Expect # Welcome to the Tutorials section of My_Linux_Journey!\nEvery tutorial you find here is tested by me personally before being published. My goal is to share reliable, practical guides based on real-world experience.\nYou are free to use all resources and tutorials available here—completely free.\nIf you find any mistakes, outdated steps, or know a better way to do something, feel free to leave a comment. Your feedback helps improve the content for everyone.\nLet’s learn and grow together in the Linux and open-source world! 🐧\n","date":"15 August 2025","externalUrl":null,"permalink":"/tutorials/","section":"Tutorials - Linux, Android \u0026 Development Guides","summary":"Comprehensive tutorials section with tested guides on Linux administration, distro installations, virtualization, Android custom ROMs, development tools, and productivity tips.","title":"Tutorials - Linux, Android \u0026 Development Guides","type":"tutorials"},{"content":"What Is the Difference Between Display Server, Display Manager, and Window Manager?\nIn a typical Linux desktop environment (and sometimes in Unix-like systems), Display Server, Display Manager, and Window Manager are three separate components that work together to provide a graphical user interface (GUI). Here\u0026rsquo;s a breakdown of each and how they differ:\n1. Display Server (Compositor) # Role: Handles communication between the hardware (graphics card/input devices) and graphical applications.\nResponsibilities: # Receives input from mouse/keyboard/touchscreen. Sends output to the display (draws windows, images, text). Manages screen resolution, multiple monitors, etc. Examples: # X11 (X.Org Server) – the traditional display server. Wayland – modern alternative to X11. Mir – Canonical’s alternative (used briefly in Ubuntu). Think of the display server as the \u0026ldquo;engine\u0026rdquo; that draws stuff and handles input/output with hardware.\n2. Display Manager (Login Manager) # Role: Provides the graphical login screen and starts your session.\nResponsibilities: # Allows you to choose a user and enter a password. Lets you pick a desktop environment (GNOME, KDE, XFCE, etc.). Launches your session (starts the window manager or desktop environment). Examples: # GDM (GNOME Display Manager) SDDM (used with KDE) LightDM LXDM Think of the display manager as the greeter or doorman that logs you in and starts the graphical session.\n3. Window Manager # Role: Controls the placement, appearance, and behavior of windows on your screen.\nResponsibilities: # Handles window borders, resizing, maximizing, minimizing, and moving. Controls focus (which window is active). May provide keyboard shortcuts and virtual desktops. Types: # Stacking WMs: Windows overlap like papers on a desk (e.g., Openbox, Metacity). Tiling WMs: Windows are automatically arranged in a grid (e.g., i3, bspwm). Compositing WMs: Also manage transparency, shadows, and animations (e.g., Mutter, KWin). Examples: # i3, bspwm, XMonad (tiling) Openbox, Fluxbox (stacking) Mutter (used by GNOME), KWin (used by KDE) Think of the window manager as the interior decorator – arranging your windows and handling how they behave.\nSummary Table # Component Role Examples Display Server Talks to hardware, draws the GUI X11, Wayland Display Manager Login screen and session starter GDM, LightDM, SDDM Window Manager Manages windows on the screen i3, KWin, Openbox, Mutter Real-World Analogy # Part Analogy Display Server Engine of a car (runs everything) Display Manager Key/ignition (lets you start driving) Window Manager Steering wheel \u0026amp; pedals (controls behavior of windows) ","date":"27 July 2025","externalUrl":null,"permalink":"/blog/display-server-manager-window-manager/","section":"Blog","summary":"Complete explanation of display server, display manager, and window manager. Covers X11, Wayland, LightDM, SDDM, and window managers like i3, Openbox.","title":"Display Server vs Display Manager vs Window Manager - Explained","type":"blog"},{"content":"","date":"27 July 2025","externalUrl":null,"permalink":"/tags/display-server/","section":"Tags","summary":"","title":"Display-Server","type":"tags"},{"content":"","date":"27 July 2025","externalUrl":null,"permalink":"/categories/tech/","section":"Categories","summary":"","title":"Tech","type":"categories"},{"content":"Sure! Here\u0026rsquo;s a breakdown of each program from your list (from 1 to 15), explaining what they do and their typical use cases:\n1. GameRanger # Type: Online gaming platform Purpose: Lets you play multiplayer games online with friends or strangers. Use case: Mainly used for older PC games that no longer have active online servers (e.g., Age of Empires, Need for Speed). Acts like a virtual LAN party tool. 2. MSI Afterburner # Type: GPU overclocking and monitoring tool Purpose: Controls your GPU’s clock speed, fan speed, voltage, and provides real-time monitoring. Use case: Useful for gamers and enthusiasts who want to tweak GPU performance or monitor temperatures and usage during gameplay. 3. OBS (Open Broadcaster Software) # Type: Streaming and recording software Purpose: Captures your screen, webcam, and audio for recording or live streaming. Use case: Popular with streamers and YouTubers for making game videos, tutorials, or live streams. 4. FurMark # Type: GPU stress test utility Purpose: Puts a heavy load on your GPU to test stability, cooling, and performance. Use case: Useful for checking GPU overclock stability or diagnosing thermal issues. 5. Audacity # Type: Audio editor Purpose: Record, edit, mix, and clean up audio tracks. Use case: Common for podcast editing, music mixing, or cleaning up audio recordings. 6. CrystalDiskInfo # Type: Disk health monitor Purpose: Shows detailed S.M.A.R.T. info about your hard drives/SSDs, including temperature and health status. Use case: Helps detect early signs of drive failure. 7. CrystalDiskMark # Type: Disk benchmark tool Purpose: Measures the read/write speeds of your storage drives. Use case: Useful for testing SSD/HDD performance or comparing different drives. 8. MemTest64 # Type: RAM diagnostic tool Purpose: Tests your system\u0026rsquo;s memory (RAM) for errors. Use case: Helpful if you’re experiencing random crashes or BSODs and want to check for bad RAM. 9. CPU-Z # Type: CPU info utility Purpose: Displays detailed specs of your CPU, RAM, and motherboard. Use case: Great for checking hardware details, overclocking status, or troubleshooting compatibility issues. 10. GPU-Z # Type: GPU info utility Purpose: Shows detailed information about your graphics card (model, memory, temperature, etc.). Use case: Helpful for checking if a GPU is genuine or diagnosing issues. 11. Free Download Manager (FDM) # Type: Download accelerator Purpose: Speeds up downloads, organizes files, supports torrent downloads, and allows scheduling. Use case: Improves download speeds and helps manage large or batch downloads. 12. DDU (Display Driver Uninstaller) # Type: Driver removal tool Purpose: Completely removes GPU drivers (NVIDIA/AMD/Intel) from your system. Use case: Often used before reinstalling or updating GPU drivers to prevent conflicts or issues. 13. Notepad++ # Type: Text/code editor Purpose: Advanced alternative to Windows Notepad with syntax highlighting and plugin support. Use case: Popular among programmers and power users for editing code or config files. 14. f.lux # Type: Eye care utility Purpose: Adjusts your screen color temperature based on the time of day to reduce eye strain. Use case: Makes your screen easier on the eyes at night by reducing blue light. 15. Hardware Info (HWiNFO) # Type: Comprehensive system info tool Purpose: Displays in-depth information about all hardware components including CPU, GPU, RAM, and sensors. Use case: Great for diagnostics, monitoring system health, and tracking temperatures/voltages in real-time. ","date":"16 May 2025","externalUrl":null,"permalink":"/blog/essential-pc-utilities/","section":"Blog","summary":"Guide to 15 essential PC utilities for power users. Covers system tools, streaming software, gaming utilities, and performance optimization programs.","title":"15 Essential PC Utilities for Gamers, Streamers, and Power Users","type":"blog"},{"content":"","date":"16 May 2025","externalUrl":null,"permalink":"/tags/gaming/","section":"Tags","summary":"","title":"Gaming","type":"tags"},{"content":"","date":"16 May 2025","externalUrl":null,"permalink":"/tags/pc-utilities/","section":"Tags","summary":"","title":"Pc-Utilities","type":"tags"},{"content":"","date":"16 May 2025","externalUrl":null,"permalink":"/categories/software/","section":"Categories","summary":"","title":"Software","type":"categories"},{"content":"","date":"16 May 2025","externalUrl":null,"permalink":"/tags/software/","section":"Tags","summary":"","title":"Software","type":"tags"},{"content":"","date":"16 May 2025","externalUrl":null,"permalink":"/tags/streaming/","section":"Tags","summary":"","title":"Streaming","type":"tags"},{"content":"","date":"16 May 2025","externalUrl":null,"permalink":"/tags/tools/","section":"Tags","summary":"","title":"Tools","type":"tags"},{"content":"","date":"16 May 2025","externalUrl":null,"permalink":"/categories/utilities/","section":"Categories","summary":"","title":"Utilities","type":"categories"},{"content":" The Kernel # 1. How to check the kernel version of a Linux system? # uname commend print system infomation\nRun:\nuname -a # print all information uname -r # print the kernel release uname -v # print the kernel version 2. List installed kernels # Run:\nxbps-query -l | grep linux or\nls /boot 3. Remove older kernels # sudo xbps-remove -R linux6.6-6.6.21_1 linux6.6-6.6.77_1 linux6.12-6.12.13_1 or\nsudo rm config-6.12.23_1 initramfs-6.12.23_1.img vmlinuz-6.12.23_1 4. Update GRUB (if using GRUB) # After removing old kernels, update GRUB so it doesn\u0026rsquo;t list them:\nsudo xbps-reconfigure -f grub or\nif you are using grub-mkconfig:\nsudo grub-mkconfig -o /boot/grub/grub.cfg ","date":"15 August 2024","externalUrl":null,"permalink":"/blog/linux-kernel-insights/","section":"Blog","summary":"Collection of insights about the Linux kernel. Covers checking kernel version, system calls, kernel modules, and core Linux kernel concepts.","title":"Linux Kernel Insights - What I Learned","type":"blog"},{"content":"","date":"15 August 2024","externalUrl":null,"permalink":"/tags/linux-basics/","section":"Tags","summary":"","title":"Linux-Basics","type":"tags"},{"content":" Welcome to My_Linux_Journey! 🐧✨ # Hey there! I\u0026rsquo;m [Bouaissi Youcef], and this website is all about my adventures in the world of Linux, Open Source, and System Administration. Whether you\u0026rsquo;re a beginner just starting out or a seasoned user looking for advanced tips, join me as I explore:\n🔹 Linux tutorials \u0026amp; command-line tricks\n🔹 Distro reviews \u0026amp; comparisons\n🔹 Sysadmin guides \u0026amp; server setups\n🔹 Scripting \u0026amp; automation (Bash, Python, etc.)\n🔹 Open-source software \u0026amp; privacy tools\n🔹 Troubleshooting \u0026amp; problem-solving\nThis website is a no-fluff, hands-on resource where I share real-world experiences—both successes and failures—to help you master Linux efficiently.\n🔔 Subscribe to stay updated on new content!\n💬 Join the discussion in the comments—let’s learn together!\nConnect with me:\n📷 Instagram: [@YourHandle]\n🐦 Twitter: [@YourHandle]\n🌍 Youtube: [@My_linux_Journey]\n\u0026ldquo;The Linux philosophy is \u0026lsquo;Do It Yourself.\u0026rsquo; Let’s embrace the journey!\u0026rdquo; 🚀\n","externalUrl":null,"permalink":"/about/","section":"","summary":"","title":"About Me","type":"page"},{"content":" Contact Us # Welcome to My_Linux_Journey – your go-to resource for learning Linux, exploring open-source software, and mastering system administration.\nCreated by Youcef, this platform is dedicated to sharing practical tutorials, in-depth Linux distro reviews, sysadmin tips, and scripting guides to help you level up your tech skills.\nWhether you’re just starting out or already an experienced user, here you’ll find valuable content on:\nLinux command-line tutorials and shell tricks Bash and Python scripting for automation Server setup guides and system administration practices Open-source tools focused on privacy and performance Self-hosted applications and home lab setups Troubleshooting real-world Linux issues We’d love to hear from you!\nWhether you have questions, feedback, or collaboration ideas, don’t hesitate to get in touch. Your thoughts help us improve and continue building a helpful resource for the Linux community.\n📬 Let’s connect and continue the journey together!\n","externalUrl":null,"permalink":"/contact_us/","section":"","summary":"","title":"Contact Us","type":"page"},{"content":"","externalUrl":null,"permalink":"/series/","section":"Series","summary":"","title":"Series","type":"series"}]