i3tree - view the i3wm window tree

An utility tool I created for i3wm to visualize the the tree of windows in the current i3 session.

i3tree

i3tree example

ThinkPad T510 Xorg NVidia config

To enable screen backlight brightness adjustment, create the following file and restart the X server

DBus Error - xinitrc

I tried to use Spotify dbus interface to play/pause tracks, found a nice shell script but it did not work, but instead I got this error message:

Error org.freedesktop.DBus.Error.ServiceUnknown: The name org.mpris.MediaPlayer2.spotify was not provided by any .service files

Turned out that the issue is probably with my X11 session initialization.

Note: At the very least, ensure that the last if block in /etc/X11/xinit/xinitrc is present in your ~/.xinitrc file to ensure that the scripts in /etc/X11/xinit/xinitrc.d are sourced.

So, I tried to source the /etc/X11/Xsession before I start the window manager:

. /etc/X11/Xsession
exec i3

(i3 is my window manager)

Called startx but no luck, X did not start. The following error was in the ~/.xsession-errors:

dbus-update-activation-environment: warning: error sending to systemd: org.freedesktop.DBus.Error.InvalidArgs: Invalid environment assignments

I had no clue what would that mean, however after some echo based debugging in /etc/X11/Xsession I could confirm that the files from /etc/X11/Xsession.d were sourced and the last file which was sourced is /etc/X11/Xsession.d/99x11-common_start. That file is a one liner:

exec $STARTUP

I guessed that $STARTUP is undefined. Checked where it would be defined and I found /etc/X11/Xsession.d/50x11-common_determine-startup

If no X session startup program was passed to the Xsession script as an argument (e.g., by the display manager), or if that program was not executable, fall back to looking for a user's custom X session script, if allowed by the options file.

That means I can define it somehow, so I tried by setting it in my:

export STARTUP=i3
. /etc/X11/Xsession

Then everything looks good. Some magic happens in those files (probably in /etc/X11/Xsession.d/20dbus_xdg-runtime) what I didn't tried to figure out yet.

Raspberry Pi külső drive kernel panic

Ha a Raspberryn a root partíció egy külső (USB) drive-on van, akkor ügyelni kell arra, hogy a /boot/cmdline.txt-ben, a root értéke PARTUUID formában legyen megadva, nem pedig /dev/sda1 vagy hasonló módon. Ellenkező esetben Kernel Panic - not syncing: VFS: Unable to mount root fs on unknown-block... és ehhez hasonló hibaüzenet várhat, legkésőbb akkor, amikor egy reboot paranccsal szeretnéd újraindítani a gépet.

A PARTUUID a sudo blkid paranccsal kinyerhető, valami ehhez hasonló lesz az output:

HashBackup DigitalOcean Spaces-be

Korábban a Raspberry PI-n keresztül töltöttem le a mentéseket, viszont a minap az SD kártya teljesen tönkrement így gyorsan kellett találnom valami megoldást a mentésre, mert ennél már csak az lenne rosszabb, ha mindenem eltűnne.

Szeretném ha valami rendes helyen lennének a mentések és nem az én összetákolt tárolóimon. Gondoltam, milyen jó lenne erre a DigitalOcean Spaces nevű object storage megoldása.

Ezelőtt duplicity-t használtam, azt hittem, hogy nem lehet egy ördöglakat megoldani, hogy mostantól máshová küldje a mentést. Igazából nem az, de akkor hirtelen képtelen voltam megoldani (azóta már sikerült).

Ezért elkezdtem egy olyan mentési megoldás után kutatni, amit hamar össze tudok rakni. A nagy sietségben a hashackup-ot választottam.

Shell script argument parsing

Ha shell scriptet írunk, gyakran előfordulhat, hogy szeretnénk azt paraméterezhetővé tenni.

Az alapvető módszerem, hogy vannak bizonyos beállítások definiálva a fájl elején egy alapértelmezett értékkel, majd a paraméterektől függően változtatom ezek értékét:

#!/bin/sh

IS_FLAG_A_SET=0

for i in $@; do
    case $i in
        '-a')
            IS_FLAG_A_SET=1
            ;;
        *)
            echo "Usage $0 -a"
            exit 1
    esac
done

if [ $IS_FLAG_A_SET -eq 1 ]; then
    echo "FLAG A"
fi

Lekezeltük még azt is, hogy össze-vissza paramétereket ne engedjünk csak úgy bepasszintani, ekkor ugynis kiírjuk a használati utasítást és hibakóddal kilépünk.

Izgalmasabb a helyzet, ha nem csak flagekkel dolgozunk, hanem szeretnénk valamilyen értéket átadni egy opcióval, mondjuk egy fájlnevet. Ha tudjuk, hogy csak egy ilyen lehet az adott programban, akkor megtehetjük, hogy azt mondjuk, hogy legyen az utolsó paraméter mindig a fájlnév.

FILE_NAME=${@:-1}
echo $FILE_NAME

De ez egyáltalán nem dinamikus, hiszen bármikor lehet olyan igény, hogy több értéket szeretnénk átadni. Ekkor például elkezdhetünk úgy dolgozni a paramétereken, hogy ha például -f kapcsolót kaptuk, akkor a következő paraméter a fájlnévnek vesszük:

Letöltés Humble Bundle-ről gyorsan, batch-ben

Roppant kényelmetlen egyenként végigklikkelni a a sok-sok linken Humble Bundle-on, amikor megvettél egy nagy adag könyvet potom áron.

Ezt kicsit meg lehet gyorsítani, ha vetünk egy pillantást a következő gistre: https://gist.github.com/Ajnasz/3356db6fd0e81013927c9cf5821a73de

cryptsetup luksFormat Invalid argument

enigma részlet

Mondjuk egy már létező howto alapján szeretnél titkosított filerendszert készíteni.
Viszont a cryptsetup luksFormat /dev/sdb1 parancs nem kér jelszót, akkor próbáld meg, hogy --verbose paramétert is beadod neki. Így egy kicsit több outputot fog kidobni magából:

VIM csomagkezelés howto

packages felirat

Az egyre több erre hajazó kiegészítő szinte messziről jövő segélykiáltásként szelte át az internet-étert egy beépített csomagkezelőért.

Így lehetett, hogy Vim 8-ban debütált a csomagok támogatása. vimhelp.org/repeat.txt.html#packages

Sajnos vagy nem sajnos jó ideje Neovim felhasználóvá avanzsáltam és minden informálódás nélkül leírtam, hogy ez a package manageres móka csak Vim-ben van, Neovimben nincs. Viszont a minap a Neovim git logot böngészve mintha erre utaló szavakat olvastam volna. A megérzésem jó volt, Neovimben is van Vim 8 csomagkezelő.

Megjegyzés: A csomagkezelő kifejezés nem a legmegfelelőbb, a Vim 8 packages a csomagok betöltését végzi, de nem telepíti őket.

Nikon D5300 webkamera Linuxon

Fénykép a Nikon D5300 fényképezőgépről

Képzeljük el milyen profi videó társalgást lehetne tartani akárkikkel ha egy jobb objektívvel rendelkező DSLR kamerát használnál webkamerként!
Szépen beállítod a kamerát, fókuszt, fényt és miegymást, és szuper minőségben látnak majd anyuék, apuék vagy akár egy kedves kolléga a föld túloldalán. (Amint lesz webcam támogatás a linuxos Skype-on is.)

Szóval hogyan is lehet Linuxon webkameraként használni egy digitális fényképező gépet? Nekem egy Nikon 5300 van éppen és roppant könnyen össze tudtam hozzá vadászni az információkat az internet végtelen világából.