bersama catatan peribadi & teknikalnya.

Nota Peribadi

Sebagai rujukan

  1. Additional Config for Ranger Files

    • commands.py
      class empty(Command):
          """:empty
      
          Empties the trash directory ~/.Trash
              """
      
          def execute(self):
              self.fm.run("sudo rm -rf $HOME/.Trash/.*")
              self.fm.run("sudo rm -rf $HOME/.Trash/*")
    • rc.conf
      map DD shell mv -t $HOME/.Trash %s

    Rujukan: Ranger Configuration
  2. Completely Kill A Process/Program

    • To kill a process e.g. cmus, find out the pid number with the following command first:-
      pidof cmus
    • And then kill it by running the below command:-
      kill <the-pid-number-obtained-by-the-above-command>
  3. Convert A .txt File to PDF with Enscript & GhostScript

    1. First of all, convert a .txt file to .ps with [5] enscript by running the following command:-
      enscript -p output.ps input.txt
    2. And then convert the .ps file to .pdf with [6] GhostScript:-
      ps2pdf output.ps output.pdf
    Rujukan: How to convert a text file to PDF format on Linux
  4. Keluar Dari Server X

    pkill X

    Rujukan: Xorg
  5. Log masuk ke dalam server jauh (remote server) melalui SSH tanpa kata laluan

    1. Cipta pasangan kunci dengan perintah ssh-keygen di dalam sistem klien yang ingin digunakan untuk log masuk ke dalam sistem server jauh itu.
      Contohnya: dari VM Win 10 (klien), log masuk ke dalam server SSH Arch.
      Ia menghasilkan dua fail; id_rsa dan id_rsa.pub di dalam direktori .ssh sistem VM tersebut.
    2. Salin kunci awam yang terhasil dari sistem klien itu ke dalam server jauh.
      • Dari sistem klien Linux, gunakan perintah ssh-copy-id.
      ssh-copy-id -i .ssh/id_rsa.pub remote_user@server_ip_address

      • Dari sistem klien selainnya seperti Windows dan FreeBSD, gunakan perintah cat.
      cat .ssh/id_rsa.pub | ssh remote_user@server_ip_address 'cat >> .ssh/authorized_keys'

      Kriptogram kunci awam yang dimiliki oleh sistem klien telah disimpan di dalam fail authorized_keys (dalam Remote System) yang bertindak memberikan autoriti dan pengesahan untuk sistem klien log masuk ke dalam server jauh SSH tanpa perlu memasukkan kata laluan pengguna remote itu lagi.


    Rujukan: How Passwordless SSH Login Works
  6. Memadam Muka Surat Daripada Fail PDF dengan PDFtk

    Kes 1:

    Fail input1.pdf mempunyai 4 muka surat dengan muka surat terakhir adalah kosong. Untuk memadam muka surat terakhir yang kosong ini, jalankan salah satu baris perintah daripada yang disenaraikan di bawah:-
    pdftk input1.pdf cat 1-3 output out.pdf
    atau
    pdftk A=input1.pdf cat A1-3 output out.pdf
    Kes 2:

    Fail input2.pdf mempunyai 15 muka surat dan halaman kelima ingin dipadam. Untuk memadam muka surat nombor 5 ini, jalankan salah satu baris perintah daripada yang disenaraikan di bawah:-
    pdftk input2.pdf cat 1-4 6-end output out.pdf
    atau
    pdftk A=input2.pdf cat A1-4 A6-end output out.pdf

    Rujukan: PDFtk Manual / alternatif
  7. Menggabung Fail PDF dengan GhostScript

    Jalankan baris perintah seperti di bawah:-
    gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=output.pdf *.pdf

    Rujukan: How to Use Ghostscript
    Tetapi lebih mudah menggunakan PDFtk.
    pdftk *.pdf cat output combined.pdf
  8. Nota Pendek / Tambahan

    1. nftables sebagai alternatif kepada iptables.
    2. Laluan ke koleksi Vivaldi Thumbnails :-
      /opt/vivaldi/resources/vivaldi/resources/.
    3. Manual Rujukan Bash: Binaan-binaan Bersyarat > case.
    4. Manual Rujukan Bash: Fungsi-fungsi Shell.
  9. Packages To Be Installed for Complete Function of Fcitx5

    Fcitx5 packages that allow full function to applications such as Vim / NeoVim, LibreOffice and a web browser for different language inputs e.g. Japanese:-
    • fcitx5-im; a group of packages that includes fcitx5, fcitx5-configtool, fcitx5-gtk and fcitx5-qt.
    • fcitx5-mozc (for Japanese input method).
    Layout untuk aturan papan kekunci:-
    Malay (msa)Keyboard - Malay (Jawi, Arabic Keyboard) - Malay (Jawi, phonetic) keyboard
    Arabic (ara)Keyboard - Arabic - Arabic (Eastern Arabic numerals, extensions in the 4th level) keyboard
  10. Paparan Tulisan bagi Bahasa 'Kanan-ke-Kiri' dalam Conky

    Tambahkan | fribidi --ltr selepas teks untuk memaksa paparan tulisan yang betul. Contoh:-
    ${color grey}${font arial:size=15}${alignc}${exec python .scripts/idate.py | fribidi --ltr}${font}


    Rujukan: A Workaround for RTL languages not supported

  11. Rekod Skrin Desktop dengan FFmpeg

    Cara merekod skrin Desktop dengan FFmpeg:-
    ffmpeg -framerate 60 -f x11grab -probesize 10MB -thread_queue_size 4096 -i $DISPLAY \ 
        -f pulse -ac 2 -probesize 10MB -thread_queue_size 4096 -i default \
        -c:v libx264rgb -crf 0 -preset ultrafast -color_range 2 output.mp4

    1. Saya pilih Lossless Recording untuk mengurangkan beban CPU. Almaklumlah, kita tidak memiliki komputer dengan processor berkuasa tinggi.
    2. Pakej yang diperlukan untuk Audio: pipewire dengan wireplumber sebagai pengurus sesi, pipewire-jack dan pipewire-pulse.
    3. Tinggalkan baris kedua sekiranya tidak mahu merakam bersama audio.
    4. Setakat ini, encoding video melalui FFmpeg menghasilkan output yang tidak disokong oleh WhatsApp. Sebagai penyelesaian, saya akan menggunakan aplikasi Shotcut untuk mengeksport video yang dirakam ke format yang sama iaitu mp4 (codec libx264), Interpolation: Lanczos (best), dan selebihnya dibiarkan dengan tetapan lalai.


    Rujukan: Capturing your Desktop / Screen Recording (Lossless Recording).

  12. Simpan pengeluaran man dari Terminal dalam bentuk PDF

    Contoh, simpan pengeluaran manual read di Terminal dalam bentuk PDF:
    man -Tpdf read > read.pdf
    atau;
    man -Tps read | ps2pdf - read.pdf

    Rujukan: Is there a way to print info/man pages to PDF?
  13. Solusi: "server gpg-agent adalah lebih lama daripada (...)"

    Ada keluar amaran server 'gpg-agent' is older than us (x < y) dan server 'dirmngr' is older than us (x < y).
    Berikut adalah langkah-langkah berkesan yang saya lakukan setelah bermacam-macam cara dibuat namun tidak juga menghilangkan amaran di atas:-
    1. Hentikan socket dan server:
      systemctl --user stop gpg-agent.socket &&
          systemctl --user stop dirmngr.socket &&
          killall gpg-agent dirmngr
    2. Padam dan cipta semula direktori .gnupg:-
      rm -rf $HOME/.gnupg && mkdir $HOME/.gnupg
    3. Cipta redirects ke lokasi yang mengendalikan soket:
      export GNUPGHOME=$HOME/.gnupg &&
          printf '%%Assuan%%\nsocket=/run/user/1000/gnupg/S.gpg-agent\n' > $GNUPGHOME/S.gpg-agent &&
          printf '%%Assuan%%\nsocket=/run/user/1000/gnupg/S.gpg-agent.browser\n' > $GNUPGHOME/S.gpg-agent.browser &&
          printf '%%Assuan%%\nsocket=/run/user/1000/gnupg/S.gpg-agent.extra\n' > $GNUPGHOME/S.gpg-agent.extra &&
          printf '%%Assuan%%\nsocket=/run/user/1000/gnupg/S.gpg-agent.ssh\n' > $GNUPGHOME/S.gpg-agent.ssh &&
          printf '%%Assuan%%\nsocket=/run/user/1000/gnupg/S.dirmngr\n' > $GNUPGHOME/S.dirmngr &&
          printf '%%Assuan%%\nsocket=/run/user/1000/gnupg/S.keyboxd\n' > $GNUPGHOME/S.keyboxd &&
          printf '%%Assuan%%\nsocket=/run/user/1000/gnupg/S.scdaemon\n' > $GNUPGHOME/S.scdaemon
    4. Cipta baris berikut ke dalam fail $HOME/.gnupg/gpg-agent.conf:
      pinentry-program /usr/bin/pinentry
    5. Pastikan kebenaran untuk direktori dan fail ditetapkan seperti berikut:
      find ~/.gnupg -type d -print0 | xargs -0 chmod 700 &&
          find ~/.gnupg -type f -print0 | xargs -0 chmod 600
    6. Reload ejen:
      gpg-agent --daemon &&
          gpg-connect-agent reloadagent /bye

    Rujukan: [1] server 'gpg-agent' is older than us (x < y), [2] pinentry, [3] Reload the agent
  14. Solusi: Ralat kunci tidak dikenali / dipercayai

    Entah kenapalah dalam tempoh beberapa minggu ni kerap terjumpa dengan ralat ini apabila nak kemas kini sistem:-
    error: package-name: signature from "packager" is unknown trust
    error: PackageName: signature from "User <email@archlinux.org>" is invalid
    error: failed to commit transaction (invalid or corrupted package (PGP signature))
    Errors occured, no packages were upgraded.
    Pautan: [1] Signature is unknown trust, [2] signature from xxx is invalid
    Jadi jalan penyelesaian pertama ialah tetapan semula untuk semua kunci (jalankan sebagai superuser):-
    rm -rf /etc/pacman.d/gnupg
    pacman-key --init
    echo 'keyserver https://keyserver.ubuntu.com' >> /etc/pacman.d/gnupg/gpg.conf #untuk Arch
    pacman-key --populate archlinux
    pacman -S archlinux-keyring
    pacman -Syyu

    Info Tambahan:

    Sekiranya kunci perlu dikemaskini, boleh refresh kunci sebelum mengemaskini sistem secara penuh, tetapi akan memakan masa untuk selesai:-
    sudo pacman-key --refresh-keys

    Rujukan: Resetting all the keys
    Tip (khusus untuk BlackArch sahaja):

    Jalankan perintah berikut sebelum memanggil skrip strap.sh untuk menambah repositori BlackArch sekiranya berhadapan dengan masalah kuncinya tidak sah.
    sed -i "s|pgp.mit.edu|18.9.60.141|g" strap.sh

    Dan tambahkan yang berikut;
    echo 'keyserver https://pgp.mit.edu' >> /etc/pacman.d/gnupg/gpg.conf #untuk BlackArch
    pacman-key --populate blackarch
    pacman -S blackarch-keyring
    juga pada baris-baris perintah di atas.
    Sekiranya terdesak sangat, aras tandatangan (SigLevel) perlu ditambah ke dalam fail /etc/pacman.conf dan ditetapkan kepada berikut:-
    [blackarch]
    SigLevel = Optional TrustAll
    Include = /etc/pacman.d/blackarch-mirrorlist

    Rujukan: [1] Still a problem with the strap.sh for existing arch installations#1122, [2] Configuring pacman

    Jika cara di atas tidak berjaya, cuba tandatangan kunci pengurus pakej secara manual:-
    1. Pergi ke pautan Master Signing Keys.
    2. Cari pautan kepada kunci PGP mereka di bawah Master Key Signatures;
    3. Right-click pautan pub rsa_atau_eddsa/key-id kepunyaan mereka dan simpan pautan sebagai fail berformat .asc dan teruskan dengan langkah-langkah berikut:-
      sudo pacman-key --add /laluan-ke-fail_key-id.asc

      Lakukan verifikasi atas cap jari berkenaan:-
      sudo pacman-key --finger key-id

      dan tandatangan secara lokal kunci tersebut:-
      sudo pacman-key --lsign-key key-id

      Setelah itu, bolehlah kemas kini pakej kembali. Insya-Allah, tiada lagi ralat yang keluar dan pengemaskinian berjaya.
      Rujukan: Adding unofficial keys
  15. Tesseract di dalam Arch Linux

    Tesseract ialah enjin sumber terbuka pengesanan teks / OCR (Optical Character Recognition) daripada sebuah imej / foto.
    Ia boleh dipasang dari repositori rasmi Arch:-
    sudo pacman -S tesseract tesseract-data-eng tesseract-data-msa

    Sekurang-kurangnya satu data bahasa perlu dipasang untuk menjalankan program ini.
    • tesseract-data-eng untuk mengesan & mengeksport teks Bahasa Inggeris daripada imej diberi;
    • tesseract-data-msa untuk mengesan & mengeksport teks Bahasa Melayu daripada imej diberi.

    Baris perintah (mesti eksport laluan untuk TESSDATA_PREFIX terlebih dahulu):-
    export TESSDATA_PREFIX=/usr/share/tessdata

    Contoh penggunaan ringkas:-
    tesseract image.jpg/.png/.tiff output
    tesseract image.jpg/.png/.tiff output -l msa
    • Jenis pengeluaran sekiranya tidak ditentukan di dalam baris perintah, akan ditetaplalai kepada fail berformat .txt (teks yang dikesan daripada imej dieksport ke fail output.txt dalam contoh di atas).
    • -l msa; contoh penetapan bahasa kepada Bahasa Melayu.
    Rujukan: [1] Tesseract User Manual, [2] Manual Tesseract dari Terminal / alternatif
  16. Tip Hosting dengan Netlify Melalui GitLab

    Netlify tidak mampu memproses git clone untuk memasang tema. Jalan terbaik untuk mengatasinya adalah dengan memadam subdirektori .git yang ada di dalam direktori tema ataupun dengan menambah git submodule.
    Jika mengalami kegagalan untuk menambah submodule dengan ralat seperti ini;
    'themes/your-theme' already exists in the index

    Lakukan langkah-langkah di bawah ini:-
    cd themes
    rm -rf your-theme
    git rm -r your-theme
    git submodule add <git_submodule_repository> your-theme

    Rujukan: Issue with adding common code as git submodule: “already exists in the index”
  17. Tukar Fail PDF kepada Imej SVG

    Saya gunakan pakej pdf2svg untuk menukar fail PDF kepada SVG demi kestabilan kualiti vektornya:-
    ARAHAN:
    pdf2svg <PDF input> <SVG output> <page number / all>
    

    • pdf2svg input.pdf output.svg 2
      Untuk menukar halaman 2 sebagai contoh, atau
    • pdf2svg input.pdf output%d.svg all
      Sekiranya ingin menukar kesemua muka surat PDF.

    Boleh juga gunakan pakej inkscape namun bukan pilihan saya kerana dua isu ini:-

    1. tidak mampu menyalin jenis tulisan/fon asal; &
    2. akan menukarkan bentuk formula Matematik kepada tulisan berkarakter Cina.

    Selain daripada itu, fail PDF boleh diceraikan halaman-halamannya dengan pakej PDFtk:-

    pdftk file.pdf burst
    Opsyen burst memerlukan pemasangan pakej bcprov dan java-common-langs.

    Contoh skrip bash atau zsh:-

    #!/usr/bin/env zsh
    
    CONVERSION_DIR="conversion"
    mkdir -p $CONVERSION_DIR
    cd $CONVERSION_DIR
    
    # For direct conversion:
    for PDF in ../*.pdf; do
        pdf2svg "$PDF" "$(basename "$PDF" .pdf)%d.svg" all;
    done
    
    # For conversion of separated pages by the PDFtk package:
    #pdftk ../output.pdf burst
    #for PDF in ./*.pdf; do
    #    pdf2svg "$PDF" "$(basename "$PDF" .pdf).svg";
    #done
    
    cd ..

    Rujukan: pdf2svg manual

  18. Video Cutting with FFmpeg

    Run command as follows:-
    ffmpeg -i input.mp4 -ss 00:00:01 -t 00:01:00 output.mp4
    -ss: The start time of the video
    -t: The duration (length of time) of the video

Kali terakhir dikemaskini:
Top