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 SSH tanpa kata laluan

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

      Dari sistem selainnya:-
      cat .ssh/id_rsa.pub | ssh remote_user@server_ip_address 'cat >> .ssh/authorized_keys'

      Kriptogram kunci awam yang dimiliki oleh sistem VM telah disimpan di dalam fail authorized_keys (dalam Remote System) yang bertindak memberikan autoriti dan pengesahan untuk sistem VM 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).
    Output 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 pergerakan skrin Desktop dengan FFmpeg berserta audio (pulseaudio):-
    ffmpeg -video_size 1366x768 -framerate 25 -f x11grab -i :0.0 \
        -f pulse -ac 2 -i default \
        -pix_fmt yuv420p -c:v libx264 -b:v 15M -maxrate 15M -bufsize 8M -crf 0 -qp 0 \
        out.mp4

    Setakat ini, cara ini sahaja yang berjaya bagi saya. I'm not sure if it's a top-notch method, though.
    Pakej yang mungkin diperlukan: pulseaudio, pulseaudi-alsa, jack2, pulseaudio-jack, cadence, jack2-dbus.
    Rujukan: [1] Capturing your Desktop / Screen Recording, [2] PulseAudio (Archwiki), [3] JACK Audio Connection Kit (Archwiki)
  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

    1. Sekiranya PDF mempunyai lebih daripada satu muka surat, pecahkan setiap muka surat dahulu dengan pakej pdftk:-
      pdftk file.pdf burst

      Opsyen burst memerlukan pemasangan pakej bcprov dan java-common-langs.
    2. Seterusnya, tukar setiap pecahan muka surat PDF kepada SVG dengan pakej pdf2svg untuk mengekalkan kualiti vektornya:-
      pdf2svg pg_0001.pdf pg_0001.svg

      Boleh juga gunakan pakej inkscape namun ia menimbulkan masalah apabila fail PDF mempunyai formula Matematik. Ia menukarkan bentuk formula kepada tulisan berkarakter Cina.
    3. Dan akhir sekali, tukar SVG kepada PNG dengan pakej ImageMagick:-
      convert pg_0001.svg pg_0001.png

    Sekiranya banyak muka surat perlu ditukarkan, buat skrip bash atau zsh. Contoh:-
    #!/usr/bin/env zsh
    
    CONVERSION_DIR="conversion"
    mkdir -p $CONVERSION_DIR
    cp output.pdf $CONVERSION_DIR
    
    cd $CONVERSION_DIR
    pdftk output.pdf burst
    rm output.pdf
    
    for PDF in ./*.pdf; do
        pdf2svg "$PDF" "$(basename "$PDF" .pdf).svg";
    done
    
    for SVG in ./*.svg; do
        convert "$SVG" "$(basename "$SVG" .svg).png";
    done
    
    cd ..

    Rujukan: Convert PDF to clean SVG? [closed]

  18. Video Cutting with FFmpeg

    Run command as follows:-
    ffmpeg -i input.mp4 -ss 00:00:01 -t 00:01:00 out.mp4
    -ss: The start time of the video
    -t: The duration (length of time) of the video
  19. Video Encoding with FFmpeg (lossless)

    • For H.264:-
      ffmpeg -i input -c:v libx264 -preset veryslow -crf 0 out.mp4
    • For H.265:-
      ffmpeg -i input -c:v libx265 -preset veryslow -x265-params lossless=1 out.mp4
    • For WEBM:-
      ffmpeg -i input.mp4 -c:v libvpx-vp9 -lossless 1 out.webm
    • For AV1 (experimental):-
      ffmpeg -i input.mp4 -c:v libaom-av1 -crf 0 -b:v 0 -strict experimental av1_test.mkv
      CRF value is from 0 to 63.
      Quoted from the Wiki:
      "Lower values mean better quality and greater file size."

    Rujukan: FFmpeg Wiki

Kali terakhir dikemaskini:
Top