Running GUI apps from Linux containers

I was trying to run Kodi and some other GUI apps from LXD containers on Archlinux but had some small problems, so I decided to document it in case I need it again in the future. The same approach should work for Docker and other types of Linux containers.

UID mapping

When it comes to running containers, it is recommended to use user namespace remapping (man subuid) to have different uid ranges for different cgroups. This way container processes are better isolated.

In cases where you use containers to simply run different software versions and don’t care about the added security of namespace remapping, you can allow reusing the same UIDs inside the container. This allows easy mounting of host directories inside the container without the need of any additional work to deal with file permissions.

So if you want to reuse the same user ID, append additional mapping lines to subuid/subgid files:

echo "root:$UID:1" | sudo tee -a /etc/subuid /etc/subgid

Create container

lxc launch images:archlinux/current/amd64 gui

If you decided to use specific UID mapping, configure container to use it

lxc config set gui raw.idmap "both $UID 1000"

For Kodi to use hardware accelerated graphics, we want to share GPU with the container:

lxc config device add gui mygpu gpu
lxc config device set gui mygpu uid 1000
lxc config device set gui mygpu gid 1000

In my case the host is running graphics server so we have to share the Xorg socket with container to be able to draw on it:

lxc config device add gui X0 proxy connect=unix:/tmp/.X11-unix/X0 listen=unix:/tmp/.X11-unix/X0 bind=container uid=1000 gid=1000 mode=0666

Permanently add DISPLAY variable to the container, then reboot the container

lxc config set gui raw.lxc 'lxc.environment = DISPLAY=:0'

You must install the same version of graphics drivers on the container. In case where both host and container is Archlinux or open source drivers are used, it’s taken care of automatically, but in case you want to use Ubuntu container, and you have Nvidia card with proprietary drivers, you have to install them in the container.

sudo apt-get install ubuntu-drivers-common software-properties-common
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo ubuntu-drivers devices
sudo apt-get install nvidia-driver-450

Allow access to Xorg on host

Not being able to access host Xorg was the reason why it didn’t work for me from the start. You have to allow connecting to X on host even when using the unix socket:

xhost +local:gui

gui is the hostname of the container

This has to be run each time X is restarted (unless configured permanently).

Using xhost + disables permission checking altogether and can be useful while testing. Run man xhost to see other configuration options.

Add audio support

Mount pulseaudio socket to the container to be able to play audio

lxc config device add gui PASocket proxy connect=unix:/run/user/1000/pulse/native listen=unix:/tmp/.pulse-native bind=container uid=1000 gid=1000 mode=0666

Install pulseaudio

sudo pacman -S pulseaudio

Inside the container make pulseaudio use the already mounted socket

sed -i "s/; enable-shm = yes/enable-shm = no/g" /etc/pulse/client.conf
echo export PULSE_SERVER=unix:/tmp/.pulse-native | tee --append /home/ubuntu/.profile

Now pactl info in the container should show that it is connected

Test it

Connect to container and make sure you have your /tmp/.X11-unix/X0 socket available. Then try running some program.

If you get this:

No protocol specified
Error: couldn't open display :0

… then you have to adjust the permissions with xhost on the host.


This is probably going to be impossible with Wayland out of the box but it is not like Wayland is really production ready, even in 2020. šŸ™‚


How to easily run graphics-accelerated GUI apps in LXD containers on your Ubuntu desktop

LXD on ArchWiki

Routing traffic through Wireguard peers

Wireguard is an amazing VPN solution that in 10 years time will be the go-to VPN solution for most. If you haven’t heard of it yet, go check it out.

Common scenario

I had a situation where clients want to access internal network which is behind NAT and no incoming ports can be opened to the outside world.

Solution approach

The solution was simple – set up Wireguard on a server elsewhere, make clients connect to that Wireguard server and tell it to route traffic through one of the clients inside the aforementioned LAN.

Intricate details

While it seems simple, I initially misconfigured a parameter which stopped the configuration from working as necessary. The misconfigured parameter was AllowedIPs parameter on the server.

After configuring the internal address of the peer in AllowedIPs line, you can append multiple subnets that can and will be routed through that peer. Adding will allow routing any traffic through it. But it will also create a default route that might have to be removed.

Without adding these subnets to the config Wireguard won’t accept packets for those subnets even if routed manually.

Then I set up separate routing table and used it for routing the other peers. This simplifies things.

Here is the Server config:

Address =
SaveConfig = false
PostUp = iptables -A FORWARD -i %i -j ACCEPT; ip rule add from lookup privatenet; ip route add default via table privatenet; `ip route del default dev wg1 table 51820`
PostDown = iptables -D FORWARD -i %i -j ACCEPT; ip rule del from lookup privatenet; ip route del default via table privatenet
ListenPort = 41234
PrivateKey = ...

# Router behind NAT
PublicKey = ..
PresharedKey = ..
AllowedIPs =,
PersistentKeepalive = 25

# Client
PublicKey = ..
PresharedKey = ..
AllowedIPs =

And here is the config of peer inside the LAN:

PrivateKey = ..
SaveConfig = false
Address =

PublicKey = ..
PresharedKey = ..
AllowedIPs =
Endpoint =
PersistentKeepalive = 25

Note how I use PersistentKeepalive to make sure it stays up. Wireguard is a silent protocol and unless some traffic is being sent to the interface, it won’t do anything.

To keep the configuration cleaner, I keep PostUp and PostDown commands in separate shell scripts.

Of course it also needs packet forwarding enabled and some forward/NAT rules on the peer behind the firewall.

Dropping of the Wireguard default route and some other things could maybe be avoided by interfacing with Wireguard directly instead of using wg-quick and config files, but I really like having those config files.

Fixing Arduino Uno serial performance

Some of you might have noticed that Arduino becomes unresponsive or really slow to respond when it sends information using serial interface.

This can also lead to messages like “Serial port ‘/dev/ttyACM0’ not found.” when trying to upload new sketches to Arduino.

I noticed this years ago but never found a solution because I always somehow managed to get it working after many upload retries and I could not find any information regarding the problem.

So, yes, it was a firmware problem and you can fix it by flashing more recent firmware that can be found here.

And instructions on flashing it are here.

LED controller (with Arduino, RaspberryPi and WebSockets)

I haven’t posted here for a while so I figured I’d write about this little project I made some time ago.

I’ve had an aquarium for some time but it had no lights so it didn’t look that cool during the dark time of the day.

I had an old Arduino Uno lying around from times before RaspberryPi and it just so happens that Arduino has 5 PWM output pins and I only needed 3.


I connected a single RGB LED and a couple of white LED’s (which is enough to light a small aquarium properly) to the Arduino and made the program use serial connection to send and receive JSON formatted data.


Then I connected Arduino (using USB) to my RaspberryPi that I use as a home server and wrote a Perl script that connects to Arduino’s serial port (using IO::Async::Stream).


The Perl script creates a WebSocket server (using Net::Async::WebSocket::Server) that allows realtime control of LED’s and color modes from a web browser.


In the future I could tweak it a bit more and bring back the scripts that I used to switch on LED’s based on events from IM clients (Pidgin/Skype) or E-mail but at the moment I’m happy with it as it is.

Telefona kontaktu migrēŔana ar Gammu

Pēc diviem ar pusi gadiem beidzot nobeidzās mans Nexus S viedtelefons.

Man ļoti patÄ«k Nexus telefoni, tāpēc nākamais noteikti bÅ«s Nexus 5, kas vēl Å”obrÄ«d nav pieejams. Kamēr gaidu, nācās tikt pie pagaidu aparāta. Savu veco telefonu jau sen atdevu māsai, tāpēc pirmo reizi nācās apmeklēt lombardu. Biju cerējis tikt pie kāda no tiem nekrāsainajiem tālruņiem, bet Ŕķiet, ka tādi vairs nav pieejami. Izvēle krita par labu kaut kādam Samsung, kam cena zem 10 latiem. Var zvanÄ«t, sÅ«tÄ«t SMS, lietot kā modinātāju.

Nexus lietoja Android operētājsistēmu, un kontaktus sinhronizēja ar Gmail. No turienes tos var eksportēt csv formātā. CSV failu atvēru ar LibreOffice, kontaktus ar vairākiem numuriem sadalÄ«ju atseviŔķos kontaktos, nodzēsu liekos laukus, un uzrakstÄ«ju Perl skriptu, kas arĀ Text::Undiacritic noņem garumzÄ«mes un mÄ«kstinājuma zÄ«mes (lai varētu lietot garākus vārdus), sakārto telefonu numuru formatējumu (noņem atstarpes, sakārto valsts kodus), un uzÄ£enerē derÄ«gu Gammu backup failu.

Visbeidzot izmantojot iepriekÅ” pieminēto GPRS modemu, ar Gammu kontaktus ieimportēju SIM kartē. 2013-10-27-184937_1440x900_scrot

Ja vēl neesi pārgājis uz viedtelefonu, bet plāno to drÄ«zumā darÄ«t, iesaku iepazÄ«ties ar Gammu. Tas ir lielisks rÄ«ks telefona datu rezerves kopiju veidoÅ”anai (kontaktiem, SMS). Pārkopējot kontaktus uz SIM karti visdrÄ«zāk tiks pazaudēta daļa datu, bet Gammu tos saglabās. šŸ™‚

Building static binaries on Linux

Windows experience

Most people using Windows knows nothing about dependency hell.

It is because Windows comes with a lot of standard dynamic link libraries (dll files) out of the box. It also seems that they don’t change as much from version to version so there are less (just a guess) compatibility issues on different Windows versions. Or maybe they all are outdated and full of bugs. In any case, it is usually easy to move binaries around from computer to computer without any problems.

Linux experience

It is a whole different picture on Linux.

Even though there are some libraries that will most likely be on most Linux systems, lots of applications require additional libraries that are probably not installed by default. And even if it seems that you have all the necessary libraries there is a big chance that they won’t be compatible with your binary because those libraries tend to change a lot between different versions.

Most of the time it won’t be a problem because maintainers of each distribution solve this by giving users tools to install necessary dependencies built for each specific program.

But what should you do when you don’t have that much time to compile hundreds of libraries for each distribution, version and architecture you are targeting? Or you simply don’t have the necessary permissions to install required packages using your distribution’s package manager and you don’t want to go through dependency hell on a limited user.

Build it statically!

It of course has it’s pros and cons but depending on what you are trying to achieve this could ease your life.

“Static hell”

Unless you have a trivial application it won’t be as easy as adding “-static” to your compiler’s argument list.

You will probably have to specify some libraries that it should statically link against at compile time.Ā And those libraries probably also require other static libraries. You get a whole different dependency hell.

And when you finally track down every library needed you find out that glibc is huge and will not play nice. šŸ™‚ Yay!

Bifrost uClibc build environment

One way of solving this would be using uClibc chroot environment for architecture that works on most desktops, server and laptops out there.

I did try some other light glibcĀ  alternatives and build environments but came to conclusion that uClibc is great and works. I found that there is a Linux distribution named “Bifrost” that uses uClibc. The creators of it provide build scripts and instructions to set up your own bifrost build i586 and x86_64 environment. I also made a fork of it on Github and use it from time to time.

Building almost anything using this environment makes building static binaries a piece of cake. And building it for i586 makes those binaries quite portable.

I haven’t tried building any GUI tools (why would I?) but I’ve successfully built applications like git, tmux, lighttpd, php, rtorrent, perl, python, etc.

Also at the time of writing this post, Bifrost doesn’t support ARM (I guess it is not the purpose of it) but that shouldn’t be a problem because there are lots of articles and info on making uClibc build environments for ARM.

E-paraksta viedkarŔu programmatūras uzstādīŔana uz Linux

IepriekÅ” rakstÄ«ju par to cik slikti, par e-paraksta viedkarÅ”u lietoÅ”anu, ir informēti Linux lietotāji.

Pievienoju pamācību loģiski domājoŔiem Linux lietotājiem, kuriem nav paniskas bailes no komandrindas.

Kas ir nepiecieŔams?

ViedkarŔu lasīŔanas iekārta

Saprotams, ka vajadzÄ«ga iekārta, kurā ievietot viedkarti. Iesaku izvēlēties iekārtas, kurām priekÅ” Linux ir pieejami draiveri.

Kā jau minēju iepriekŔējā rakstā – SCR3310 ir gana lēta un pārbaudÄ«ta iekārta.


Pieslēdzam iekārtu datoram un lasām tālāk.

ViedkarŔu lasītāja draiveris Linux kernelim

SCR3310 gadÄ«jumā nekādi papildus draiveri nebija jāinstalē, jo tie nāk komplektā ar pietiekoÅ”i jaunu kerneļa versiju. Kaut kur lasÄ«ju, ka senāk vajadzēja atjaunināt firmware, bet paÅ”am ar to nav nācies saskarties.

Citām iekārtām varētu nākties uzinstalēt papildus draiverus un/vai firmware.

Programmatūra komunikācijai ar iekārtu

Pieļauju, ka Å”im mērÄ·im pastāv dažādas aplikācijas, bet vispopulārākā ir “pcscd” (PC/SC Smart Card Daemon).

Uz Archlinux to var uzinstalēt palaižot:

$ sudo pacman -S pcsclite pcsc-tools

Uz Debian bāzētām (Debian/Ubuntu/Mint/u.c.) sistēmām to var uzinstalēt palaižot:

$ apt-get install pcscd pcsc-tools

Pēc instalācijas jāieslēdz pcscd serviss. Uz Archlinux jāpalaiž:

$ sudo systemctl enable pcscd.service
$ sudo systemctl start pcscd

Uz Debian bāzētām sistēmām tam vajadzētu notikt automātiski, bet ja tā nenotiek, tad jāpalaiž:

$ sudo /etc/init.d/pcscd start


Šobrīd ieliekot e-paraksta viedkarti iekārtā, un palaižot komandu

$ pcsc_scan

vajadzētu parādÄ«ties informācijai par ievietoto karti. Ja parādÄ«ts tikai sarkans uzraksts “waiting for the first reader”, vai “waiting for the card”, tad attiecÄ«gi vai nu nestrādā iekārta, vai arÄ« Tu nepareizi esi ievietojis viedkarti. šŸ™‚

Middleware bibliotēka konkrētajam viedkarÅ”u modelim

Ar to vien, ka spējam noteikt kāda viedkarte ievietota iekārtā – nepietiks. Pcscd nav informācija par to kā pilnvērtÄ«gi komunicēt ar Latvijā izsniegto e-paraksta viedkarti, tāpēc nepiecieÅ”ams uzstādÄ«t viedkarÅ”u ražotāja bibliotēku.

Latvijā lieto Luxtrust ražotās viedkartes, tāpēc jādodas uz viņu mājaslapu un lejupielāžu sadaļā jāmeklē Middleware programmatūra Linux sistēmām.

BrÄ«dÄ«, kad Å”o rakstu, Luxtrust lapā ir pieejamas “.deb” pakas Ubuntu distribÅ«cijai, 32 bitu un 64 bitu versijām.

Piedāvātās pakas visdrīzāk būs derīgas arī citās, uz Debian bāzētās distribūcijās (Debian/Mint/u.c.).

Ubuntu/Debian lietotājiem jāaizvieto 64bit ar 32bit, ja tiek lietota 32 bitu sistēma, un jāizpilda:

$ wget
$ sudo dpkg -i LuxTrust_Middleware_64bit_6.1-007.deb

Archlinux lietotājiem esmu izveidojis luxtrust-middleware PKGBUILD failu, kas ir pieejams AUR sistēmā. Ja lieto Archlinux un ir uzinstalēts yaourt palīgrīks, tad to var uzinstalēt izpildot:

$ yaourt -S luxtrust-middleware

Es gan neizpētīju vai Luxtrust bibliotēkas nav atkarīgas no citām bibliotēkām, tāpēc, ja kaut kas nestrādā, lūdzu paziņot komentāros.

Citu distribÅ«ciju lietotājiem vai nu jāizpēta iespējas konvertēt esoŔās .deb pakas uz jÅ«su distribÅ«cijas paku formātu, vai arÄ« pakas saturs manuāli jāizpako, un jāiekopē attiecÄ«gajās sistēmas mapēs (ko es noteikti nerekomendēju darÄ«t).

Kad middleware programmatÅ«ra uzinstalēta, vajadzētu varēt atvērt PIN koda mainÄ«Å”anas aplikāciju, ko var atvērt izpildot:

$ CCChangePinTool

Ja aplikācija atveras un viss strādā – lieliski, varam turpināt. Ja parādās kļūdu paziņojumi – lÅ«dzu ziņot komentāros. šŸ™‚

PMLP, vai LVRTC iepriekÅ” piedāvātajās middleware pakās tika lietoti citi failu nosaukumi. Tā kā tie ir statiski ierakstÄ«ti e-paraksta Java aplikācijās, jāizveido symbolic link, savādāk saņemsim kļūdas paziņojumu.

$ cd /usr/lib/pkcs11/
$ sudo ln -s

Pārlūkprogrammas konfigurācija

Vēlāk izveidoÅ”u pamācÄ«bu Chromium lietotājiem, bet Å”obrÄ«d pieejama informācija par uzstādÄ«Å”anu uz Firefox.


Atveram Firefox Preferences > Advanced > Certificates > Security devices > Load.

Nosaukumu ierakstam pēc izvēles, bet pie Module filename norādām:


Pēc OK pogas nospieÅ”anas, sarakstā bÅ«tu jāparādās jaunajai iekārtai. To izvēloties, bÅ«tu jāaktivizējas Log in pogai. Uz tās uzspiežot vajadzētu parādÄ«ties PIN koda pieprasÄ«juma logam. Ja tā ir, tad viss kārtÄ«bā.

Turpmāk lietojot e-parastu, var gadÄ«ties, ka pēc iekārtas, vai viedkartes atvienoÅ”anas un atkārtotas pieslēgÅ”anas, var nākties pārstartēt interneta pārlÅ«kprogrammu.

LVRTC un/vai Latvijas pasta sertifikāti

Pēdējais solis ir sertifikātu pievienoÅ”ana. Kā to izdarÄ«t uz Chromium – aprakstÄ«Å”u vēlāk. Å obrÄ«d pieejama pamācÄ«ba Firefox pārlÅ«kprogrammai.

Dodamies uz eparaksta mājas lapu, un ielādējam nepiecieÅ”amos sertifikātus.

Firefox vajadzētu automātiski piedāvāt uzinstalēt sertifikātus, bet ja tā nenotiek, saglabājam tos datorā un pievienojam manuāli, atverotĀ  Firefox Preferences > Advanced > Certificates > View Certificates logu.


Tagad visam vajadzētu strādāt. Tikai jāatceras, ka pēc iekārtas pievienoÅ”anas, visdrÄ«zāk, nāksies pārstartēt pārlÅ«kprogrammu, kā arÄ« labākais veids kā noskaidrot, vai viedkarte kārtÄ«gi ievietota iekārtā, ir izpildot komandu pcsc_scan.

GaidÄ«Å”u jÅ«su komentārus un ieteikumus. šŸ™‚

Labais un sliktais Latvijas e-paraksta sistēmā

Manuprāt, lielākā daļa piekritÄ«s, ka e-paraksta ideja – iespēja elektroniski parakstÄ«t dokumentus, iesniegt tos dažādām iestādēm nosÅ«tot e-pastu , un parakstus pārbaudÄ«t elektroniski –Ā  ir ļoti laba. Vairs nekāda dirnÄ“Å”ana garās rindās, nav jāmaksā notāram par paraksta apstiprināŔanu, kā arÄ« dokumentus var iesniegt no jebkuras vietas, kur pieejams interneta pieslēgums.

Izklausās ļoti labi. Gandrīz pārāk labi.

Å obrÄ«d reāli Latvijā darbojas 3 dažādi e-paraksti, no kuriem tikai 2 varētu bÅ«t gana droÅ”i, un tikai vienu var iegÅ«t komplektā nesaņemot to nedroÅ”o, turklāt tas nav pieejams kuram katram.

E-paraksta veidi

  • Latvijas pasta e-paraksts uzņēmumiem – EME (viedkarte)
  • ID kartes, kuras var lietot pases vietā, ceļojot pa ES – eID (viedkarte)
  • Virtuālais e-parasts (nāk komplektā ar eID, turklāt no tā nav iespējams atteikties)


Sākumā tika ieviests EME. Å Ä·iet, ka tas neguva pietiekoÅ”i lielu atsaucÄ«bu, un pēc eID iznākÅ”anas pie EME var pieteikties tikai uzņēmumi.

Neskatoties uz to, ka EME var pieteikt tikai caur uzņēmumu, tas vizuāli izskatās ļoti nenopietni.



ID kartes, kuras izsniedz PMLP, ir Latvijā oficiāli atzÄ«ts dokuments. To var lietot ceļoÅ”anai pa ES, un, ja nemaldos, to var izmantot kā atgrieÅ”anās atļauju, ja tiek pazaudēta pase (ārpus ES).

Tajās ir RFID čips (tāds pats kāds jaunajās pasēs), kā arī e-paraksta viedkarte.


Virtuālais e-paraksts

Izstrādāts Ä·eksÄ«Å”a pēc?


Virtuālais e-paraksts ļauj parakstÄ«t dokumentus portālā un ir droÅ”s tikai tāpēc, ka tā ir ierakstÄ«ts likumā. šŸ™‚ Realitātē tas ir pakļauts MITM uzbrukuma riskiem un tieÅ”i Ŕī iemesla dēļ ar virtuālo e-parakstu parakstÄ«tus dokumentus nepieņem praktiski neviena nopietnāka iestāde.

Varētu vaicāt – kāpēc tad tika izveidots virtuālais e-paraksts?

Es varu tikai minēt, ka tas tika izveidots tāpēc, ka eID un EME lietoÅ”ana ir gana sarežģīta, un lietoÅ”anas instrukcijas ir tik ļoti nepilnÄ«gas, ka gadÄ«jumā, ja nebÅ«tu izveidots virtuālais e-paraksts, tiktu sacelta liela jezga par kārtējo, ne lÄ«dz galam novesto e-paraksta risinājumu.

Potenciālās un reālās problēmas

Informācija par e-paraksta lietoŔanu

Sākumā Ŕķiet, ka mājas lapa ir ļoti pārskatāma un labi strukturēta, bet brÄ«dÄ«, kad mēģini sameklēt sev nepiecieÅ”amo informāciju, rodas sajÅ«ta, ka pie sistēmas strādājuÅ”i pirmklasnieki. Informācija daudzās lapās dublējas, bet dažas lietas vienkārÅ”i nav iespējams sameklēt. Daļu tehniskās informācijas man bija vieglāk sameklēt Igaunijas e-paraksta mājas lapā, jo tā ir labāk strukturēta un informācija ir pilnÄ«gāka.

OSX un Linux lietotājiem

Ja OSX (Apple) lietotājiem ir pieejama vismaz kaut kāda nepilnÄ«ga un greiza informācija par e-paraksta viedkarÅ”u lietoÅ”anu, tad Linux lietotājiem pasaka, ka neatbalsta Linux operētājsistēmu, un kaut arÄ« ražotājs (kas gan nekur nav norādÄ«ts) apgalvo, ka Linux ir atbalstÄ«ts, viņi par to neko nezin un nevēlas zināt.

Vairāk informāciju izdevās sameklēt pēc tam, kad vienā no PDF dokumentiem atradu karÅ”u ražotāja nosaukumu, un tālāk jau palÄ«dzēja Google. foruma administratori

E-paraksta mājas lapā ir arÄ« forums, kurā ikviens var uzdotĀ  jautājumus.

Vecākos foruma ierakstos var novērot, ka foruma administratori uz sev nepatÄ«kamiem jautājumiem cenÅ”as atbildēt ar: “mēs par to neesam atbildÄ«gi, ejiet pie PMLP”. Turklāt, palasot Ŕīs tēmas, var secināt, ka pievienotās saites uz PMLP lapu vairākas reizes palikuÅ”as nederÄ«gas. (Kāda velna pēc PMLP lapai tik bieži maina linku struktÅ«ru?) [1,Ā  2,Ā  3]

Ja sākumā foruma administrācija centās novelt vainu uz PMLP, tad ar jauno e-parakstu, kas bÅ«tÄ«bā ir identisks vecajam (+ virtuālais e-paraksts), tiek piekopta vilcināŔanās stratēģija. [1]

Jaunākos ierakstos foruma administratori tēmās, kas saistÄ«tas ar OSX un Linux instalācijām, paprasa, kuru no e-paraksta veidiem jautājuma uzdevējs ir domājis, tādejādi vilcinot laiku, droÅ”i vien cerÄ«bā, ka jautājuma uzdevējs vairs neatgriezÄ«sies. (Neviens lietotājs nepiesauktu operētājsistēmu, ja mēģinātu lietot virtuālo e-parakstu. Un pat ja piesauktu, priekÅ” kam lieki tērēt cilvēku laiku? Uzreiz bÅ«tu uzrakstÄ«juÅ”i, ka no Linux un OSX “ne bÅ«, ne bē”, un lieta darÄ«ta.)

Mistiskie paziņojumi

Mēģinot ar EME ielogoties portālā, parādās paziņojums, ka ar Firefox un Opera pārlūkiem nav iespējams ielogoties. [1] Kas tās par muļķībām?


Es vēlāk atÅ”ifrēju, ka tas paziņojums visdrÄ«zāk ir domāts Windows lietotājiem, kuriem IE un Chrome pārlÅ«ki lieto Windows iebÅ«vēto sertifikātu sistēmu, bet Firefox un Opera ir savas sistēmas, kas oficiāli netiek atbalstÄ«tas.

Tās tieŔām izrādījās muļķības, jo beigu beigās man sanāca ielogoties no Firefox un Chrome gan uz Linux, gan uz OSX.

Es noteikti kādā no nākamajiem rakstiem pievienoÅ”u pamācÄ«bu kā lietot e-parakstu OSX un Linux vidē.

E-paraksta standarts

E-paraksta dokumentiem ir savs standarts. Atvērts standarts. Atvērts standarts, kura dokumentācija hostējās Microsoft mājas lapā, bet saites uz tiem ir nomiruÅ”as.

…pag, tad ir open source, vai nav?

Izmeklējoties pa Google, pie dokumentiem var tikt caur lietuvieÅ”u adresēm, jo izskatās, ka Latvija mēģina Lietuvai piedāvāt tādu paÅ”u standartu.

E-paraksta programmatūra

Å obrÄ«d pieejamā e-paraksta programmatÅ«ra ir rakstÄ«ta programmÄ“Å”anas valodā Java.


Labi, Java nav tā ātrākā, vai droŔākā, bet vismaz bÅ«tu jādarbojas uz visām operētājsistēmām, vai ne?

Kind of…

Darbinot pārlÅ«kprogrammu debug režīmā ievēroju, ka uz Linux eparaksta appleti meklē neeksistējoÅ”as bibliotēkas. Nezinu kāpēc tā, bet to izdevās atrisināt izveidojot symlinku uz ražotāja bibliotēku. Å Ä·iet, ka tas tāpēc, ka PMLP piedāvātajās pakās bibliotēkām ir citi nosaukumi. Diez kāpēc tā? Vai tur ir kādi papildus pārsteigumi? šŸ˜€

Lejupielādei ir pieejama arÄ« offline lietoÅ”anai paredzēta e-paraksta aplikācija (joprojām Java).euso

Tajā atverot jaunu dokumentu izlec dažādas izstrādātāja reklāmas. Es ceru, ka par to izstrādātājs valstij iedeva nelielu atlaidi. šŸ™‚

spam1 spam2spam3

Fun fact: Ideja par vēlÄ“Å”anām internetā

Manuprāt, ja Å”obrÄ«d vēlÄ“Å”anas notiktu internetā, tad vai nu tajās caur internetu nobalsotu labi ja 0.1% vēlētāju (ja viedkarÅ”u lietoÅ”ana bÅ«tu obligāta), vai arÄ« ļoti ticams, ka vēlÄ“Å”anu rezultāti bÅ«tu sagrozÄ«ti (virtuālā e-paraksta potenciālo ievainojamÄ«bu dēļ).

Fun fact: E-paraksta time stamp serveri darbina IIS

Man nav nekādu iebildumu pret Microsoft (ir gan) un kompilētu kodu, bet pārāk bieži ir redzētas problēmas ar caurumainu, nepārskatāmu bināru blāķi, ko beigās nav iespējams izlabot, jo ražotājs, protams, nav iedevis izejas kodu. Protams, tā nav problēma, ja Tev ļoti patÄ«k darboties asemblerÄ«. šŸ™‚

Es ļoti, ļoti ceru, ka tuvākajā laikā netiks atrasta kāda Windows vai IIS ievainojamība, kas ļautu bojāt time stamp servera darbību.

Fun fact: Caurums e-paraksta forumā?

Apskatot foruma arhīvu, pēdējā lapā atradu ko interesantu.


Vai esmu vienÄ«gais, kurÅ” to pamanÄ«jis? Un ja ir Ŕāds caurums, cik liela iespējamÄ«ba, ka pārējā sistēma ir droÅ”a? šŸ™‚

Problēmu risinājumi un pozitīvais

Es ieteiktu LVRTC darbiniekiem pakonsultēties ar zinoŔākiem Linux un OSX lietotājiem/administratoriem, lai izveidotu jaunu, derÄ«gu pamācÄ«bu, kā uz Linux uzinstalēt nepiecieÅ”amās bibliotēkas un draiverus, kā arÄ« nomainÄ«t kļūdu paziņojumus, lai lietotāji netiktu maldināti. Tas nav tik sarežģīti, vai neiespējami.

Pozitīvais foruma lietotāji

Ar e-paraksta foruma lietotājiem nav tik traki kā ar administratoriem. Vairāki lietotāji ir ierakstÄ«juÅ”i tÄ«ri labas pamācÄ«bas. Ja vēl strādātu programmatÅ«ras lejupielādes saites, un tiktu norādÄ«ts, ka pastāv arÄ« programmatÅ«ra, kas domāta 64 bitu sistēmām, bÅ«tu pavisam labi. šŸ™‚

Offtopic: ViedkarŔu lasītāju SCR3310 no ebay var pasūtīt pa ~10 latiem.


Kad tomēr izdodas uzstādÄ«t nepiecieÅ”amo programmatÅ«ru, lietot e-parakstu ir diezgan vienkārÅ”i un ērti.

Making a bridge between Skype and XMPP chats

Some people tried to avoid Skype (and Facebook, Gmail, etc.) long before Snowden’s leaks, but most never cared and still don’t. And when you are the only fool abandoning Skype, you don’t really have anyone online to communicate with. Even if it’s only for chit chat and sharing your 9gag links.

So how do you make the move less painful?

You create a bridge between Skype and XMPP!

Relay in action
Relay in action

I made a small Python script that sends messages between XMPP and Skype chats.

At the moment it uses Skype4py and python’s XMPPĀ library to act as a client. It would be cooler if Jabber’s part would get integrated in the XMPPĀ server itself, thus allowing to simulate Skype users as real XMPPĀ users. But I probably won’t do it because it takes too much effort and it already works the way it is.

Yes, it leaks stuff to Skype, so this should only be used for more or less public chats.

After I clean up the code a bit, I’ll put it on Github.

P.S. And making these bridges actually encourage more users to migrate to your XMPP server.

Auto-uploader v4

Uploader v4 is out and it is miles ahead of v3 in terms of stability, ease of setup and ease of use.

Even though I released it a few months ago, there were some things I wanted to add and test before I announce it to the public. It now performs better than I expected so I figured I should write about it here.

The new start/stop/status script.
The new start/stop/status script in action.


Statically compiled – no need for compiling

The time it takes to do the initial setup has been reduced a lot. There is no need to install any dependencies anymore because Uploader is now available as a statically compiled i686 binary that should run on most Linux servers.

I also made statically compiled rTorrent (with the headless patch), tmux, lighttpd and other tools that are used with the uploader. You can use these versions to save some time going through dependency hell and compiling, or you can use your own binaries if you wish to. (Since statically compiled binaries might be of interest to some of you, especially in case of rTorrent, I’ll talk about this in a separate post. Sources are on my Github page.)

This is good news because it isĀ possible to run Uploader on Ā shared seedboxes. So far I have tested it only on some shared boxes with SSH access but it should be possible to use it without ssh as long as there is some way to execute the binary.

Better structured, completely portable

In previous versions it took some time to change paths in every configuration file to make it work after moving it to other location. The new version uses relative paths and some cool scripts to make sure it runs no matter where you move it.

Just move “tuper4/” folder to a new location/server and run it without doing any manual changes.Ā Yes, it is that simple.

Easy to migrate

If you are still using the previous version it is easy to migrate to v4 using the new migrate script. Just run a single command and your’e all done.

Automatic updating

V4 will receive critical updates automatically by default. This means that when a download source or some API changes and breaks some functionality, it will fix itself as soon as update is available.

Update status messages on the server during testing.
Update status messages on the server during testing.

Usability and features

Now, when deploying and updating is made easy I have had more time to focus on new features and usability improvements.

Uploader is now easier to use by novice users and at the same time more advanced features have been added for the more experienced users who need more control over how things work.


Multiple functions were fixed and new features were added to the core of the Uploader. Among them are:

  • Easier to view and understand debugging messages;
  • Better dupe detection;
  • Smart IMDB title search. This allows automatic IMDB info and poster retrieval;
  • Fixed TVRage info lookup for TV shows;
  • Updated GiantBomb game info retrieval functions;
  • Better BBCode converter and image uploading functions to include screenshots and other images in the description;
  • Fixed RAR and ZIP extraction functions that allow automatic creation of new unpacked releases.
  • Better handling of unicode, messed up encoding and ascii art.

Ascii art removal test
Ascii art removal test


Some of the non-core improvements:

  • Added new debugging tool called “logstream” that uses websockets to show realtime message output of the Uploader. It also shows process groups and allows to view output of each single task;
  • Modified browser plugin to use websockets to show realtime status of the task being run;
  • New version of web panel is being worked on;
  • New script to easily start, stop and see the status of the Uploader and all the related processes (rTorrents, lighttpd).

Logstream output showing task history.
Logstream output showing task history.

Better support

Making it easier to set up and update gives more time for supporting users and helping them find answers to their questions.

Also wiki and forum has improved and it is easier to find answers than it was before.

Music release info search results for Waffles upload form.
Music release info search results for Waffles upload form.

Existing users

And as it has always been, existing users still get the access to the latest version and it probably will stay this way in the future.



As years have passed, Uploader is still being developed and version 4 is a big step forward. It is completely different experience to how it was couple years ago. Making these changes makes it better for you, saves more time for me and it also means that it costs less. So, when you need the ultimate tool to automate it, you know where to look. šŸ™‚