Archive

Programma’s starten via SSH op een cliënt.

Via een SSH sessie kun je contact maken met een andere computer, maar hoe mooi zou het zijn dat je een programma die op een andere computer staat ook kunt gebruiken op je cliënt computer. Na een tijdje stoeien is het me gelukt om een programma te kunnen uitvoeren die eigenlijk op een andere computer staat.

Hiervoor heb ik 2 computers die allebei een Linux besturingssysteem draaien met Ubuntu. Hiernaast is het wenselijk om beide computers in te stellen naar de X11 omgeving. Het kan namelijk zijn dat je Linux omgeving standaard ingesteld staat voor Wayland.

Je kunt op een makkelijke manier zien welke omgeving actief is door in de terminal in te voeren:

export -p

Kijk bij XDG_SESSION_TYPE welke actief staat en doe dit zowel op de server als de cliënt computer.

Volg de instructie op deze site Van Wayland naar X11 als je ziet dat Wayland actief staat.

Als je dit niet doet, kan het zijn dat bepaalde programma’s het niet doen, of alleen maar starten aan de server kant. In sommige gevallen kunnen de wat eenvoudigere programma’s die niet zo afhankelijk zijn van deze beeldscherm servers ook zonder deze aanpassing werken.

Dit is een voorbeeld regel die je in een terminal kunt invoeren aan de cliënt kant.

ssh -X peter@192.168.1.1 mahjongg

Met de hierboven genoemde voorbeeld zou je het spelletje Mahjongg kunnen starten. De -X optie die we gebruiken verteld de ssh sessie dat de X11 omgeving geactiveerd is en schakelt bij het uitvoeren van een programma naar de display van de cliënt. In dit voorbeeld in peter de gebruikersnaam die bekend is op de server, en het ip adres 192.168.1.1 het ip adres waarmee de server verbonden is op het netwerk.

De gebruikersnaam en ip adres van de server is natuurlijk in iedere situatie weer anders.

In sommige gevallen kan het zijn dat een sessie niet start bij sommige programma’s. Voeg in dat geval eens een -s optie toe aan het programma. Zoals ik weet is dat bij het tekstprogramma gedit nodig om het te laten werken. De -s staat overigens voor de standalone optie.

ssh -X peter@192.168.1.1 gedit -s

Omdat de verbinding over het netwerk soms erg traag kan werken bij de wat grotere programma’s kan het verstandig zijn de sessie te laten comprimeren. Vooral bij programma’s als libreoffice of een browser zoals firefox kan het allemaal net wat soepeler lopen.

ssh -X -C peter@192.168.1.1 libreoffice

Bash bestanden

Als je steeds een reeks commando’s wilt uitvoeren kan het handig zijn om deze in een bash bestand uit te voeren.

Het grote voordeel is:

  • Je hoeft niet telkens een boel tekst in te voeren.
  • Het bash bestand kun je gebruiken bij andere toepassingen.
  • Je kunt ook gebruikers invoer toepassen.

Een voorbeeld is het updaten van een linux systeem. Meestal gevolgd door 3 commando’s wat vereenvoudigd kan worden tot 1 bestand.

#!/bin/bash

sudo apt update
sudo apt upgrade
sudo apt autoremove

Het hoeft niet maar de regel start met #!/bin/bash zodat het systeem direct snapt dat dit een bash bestand is. Je kunt de tekst in een tekst editor opslaan als een .sh bestand. Dit bestand kun je uitvoeren op verschillende manieren.

sh bashbestand.sh
bash bashbestand.sh
./bashbestand.sh

Door een bashbestand voorafgaande uit te voeren met sh wordt deze op een eenvoudige wijze uitgevoerd. De andere opties hebben net wat meer mogelijkheden. Je zult hiernaast ook zien dat de uitvoering van een bash bestand ook anders kan zijn.
Probeer bijvoorbeeld maar eens het volgende uit te voeren op de 3 verschillende manieren.

printf "hallo\n dit is een regel met printf.\n\n"
echo "hallo\n dit is een regel met echo.\n\n"

Om ./bashbestand.sh uit te voeren moet je deze eerst uitvoerbaar maken. Dit kun je doen door het volgende in te voeren.

chmod +x bashbestand.sh
#!/bin/bash

printf "1. Menu optie 1\n2. Menu optie 2\n3. Menu optie 3\n\n"

read -p "Keuze: " VAR

if [ $VAR -eq 1 ];then
     Typ hier een terminal commando
elif [ $VAR -eq 2 ];then
     Typ hier een terminal commando
elif [ $VAR -eq 3 ];then
     Typ hier een terminal commando
fi

Terminal achtergrond proces starten

Als je een script wil uitvoeren in een terminal stopt de script als je de terminal sluit. Dit gebeurd ook als je via een ssh een script uitvoert.
In sommige gevallen is het wenselijk om de terminal of ssh sessie te willen sluiten, maar dat je script op de achtergrond blijft door werken.

Denk hierbij bijvoorbeeld aan een python scripts die een sensor aan de praat moet houden.
Dan hoef je niet telkens de terminal te zien. Ook als je op een Rasberry Pi een lite versie draait zonder desktop omgeving.

Gelukkig kennen we bij de meeste Linux distributies hier een goede en ook een makkelijke oplossing voor.

Door de volgende regel in te voeren start je als het ware je script in de achtergrond.

setsid ./script.py

Als je dit invoert zie je in de eerste instantie niets gebeuren. In de terminal sessie ga je gewoon naar de volgende regel, echter op de achtergrond is er een aparte sessie begonnen waar je script ./script.py uitgevoerd wordt.

Dat deze script uitgevoerd wordt kun je zien door het volgende in te voeren

top -U gebruikersnaam

Je ziet nu alles wat deze gebruiker uitvoert. Je ziet als het goed is ook de naam van het script die je gestart hebt.

onder de kolom PID zie je een nummer wat gekoppeld is aan het programma of script wat op dit moment loopt.
Dit nummer kun kun je weer gebruiken om het script weer te stoppen. Gebruik hiervoor het kill commando.

kill PID-nummer

Bijvoorbeeld:

kill 12345

Samba gebruikers aanmaken

Bestanden delen in een Linux omgeving is als een dans. De benodigdheden om dit te doen, zijn vernoemd naar een heilige Nigeriaanse dans genaamd Samba. Andrew Tridgell heeft de eerste versie hiervan ontwikkeld in 1991. Wanneer je achter de computer zit, wil je soms een bestand laten ‘dansen’ van de ene computer naar de andere. Tot op de dag van vandaag maken we nog steeds gebruik van deze software op alle gangbare systemen.

Het is altijd verstandig om niet zomaar iedereen toegang te geven wanneer je bestanden of mappen wilt delen via het netwerk. Je zou kunnen verwachten dat je met je systeemgebruikersnaam en wachtwoord toegang kunt krijgen tot een gedeelde map. Echter, als je Samba gebruikt, werkt dit niet op die manier. Samba heeft zijn eigen gebruikers, die je zelf nog even moet introduceren. Je kunt toegang verlenen door een unieke gebruikersnaam en wachtwoord aan te maken.

Om een Samba-gebruiker aan te maken, kun je het volgende commando gebruiken:

sudo smbpasswd -a {gebruikersnaam}

Met de optie -a kun je een Samba-gebruiker toevoegen. Vervang {gebruikersnaam} door de nieuwe gebruikersnaam die je wilt aanmaken. Het systeem zal je vragen om een nieuw wachtwoord in te voeren, en dit wachtwoord wordt vervolgens opgeslagen.

Nu je een gebruikersnaam en wachtwoord hebt aangemaakt, kun je toegang krijgen tot de gedeelde map.

Youtube filmpjes downloaden

Youtube is een goede plek om video’s te bekijken, maar het is niet gegarandeerd dat een video altijd beschikbaar blijft. Als je geen abonnement hebt op Youtube, zul je vaak reclameadvertenties moeten bekijken. Je kunt een browserextensie installeren om advertenties te vermijden, maar als je een video echt wilt bewaren, is het handig om deze op je computer op te slaan. De meeste plugins om video’s van Youtube te downloaden werken niet meer vanwege regelgeving. Daarom is het tijd om op zoek te gaan naar een goed alternatief.

Een goede manier om youtube filmpjes te downloaden is om gebruik te maken van het programma yt-dlp.

Het ging bij mij in de eerste instantie niet meteen goed, maar na een paar verschillende pogingen was dit de manier wat werkt.
Geeft het volgende in in de terminal:

snap install yt-dlp

Na een korte installatie kun je het programma al uitvoeren. Belangrijk is wel om het uit te voeren in je home directory.

cd ~
yt-dlp https://youtu.be/AIa0dj9MXn8

Dit programma accepteert:

Er zijn waarschijnlijk ook andere videodiensten beschikbaar waar dit mee werkt, maar ik heb in ieder geval goede ervaringen met dit lijstje. Hopelijk kun je op dezelfde manier je favoriete filmpjes downloaden en ben je niet afhankelijk van anderen.

Systeem verbeteren zonder beeldscherm

Als je een Linux systeem hebt die je alleen maar op afstand gebruikt, is het onnodig om aan de computerkast een monitor te verbinden.
Dit wordt ook wel een headless-systemen genoemd. Toch als je zo de monitor afschakelt zul je bemerken dat de computer erg traag reageert. Dit komt omdat het systeem is ingesteld om met een monitor te werken, maar die is er niet.

Als je systeem traag reageert kun je dit makkelijk oplossen door een aanpassing te maken in de videokaart instellingen.
Je voegt dan een virtueel beeldscherm toe zodat je systeem niet steeds issues heeft om een daadwerkelijk beeldscherm te zoeken.
Door een virtuele videodriver te gebruiken, kan systeembronnen worden bespaard, omdat er geen grafische interface of videokaart nodig is.

Voer als eerste het volgende uit in de terminal

sudo apt-get install xserver-xorg-video-dummy

Hierna kun je een aanpassing maken in het xorg.conf bestand. Dit bestand zou je moeten kunnen vinden onder de volgende mappen:

  • /usr/share/X11/xorg.conf.d/
  • /etc/X11/

Als je dit niet kunt vinden, maakt je een nieuw bestand aan onder /usr/share/X11/xorg.conf.d die je dus xorg.conf noemt.
Dit kun je doen via een tekstverwerker of via een terminal omgeving.

sudo nano /usr/share/X11/xorg.conf.d/xorg.conf

Als het bestand al bestond kun je de inhoud vervangen door het onderstaande. Het gaat er om dat het bestand alleen de volgende tekst bevat.

Section "Device"
    Identifier  "Configured Video Device"
    Driver      "dummy"
    # Default is 4MiB, this sets it to 16MiB
    VideoRam    16384
EndSection

Section "Monitor"
    Identifier  "Configured Monitor"
    HorizSync 31.5-48.5
    VertRefresh 50-70
EndSection

Section "Screen"
    Identifier  "Default Screen"
    Monitor     "Configured Monitor"
    Device      "Configured Video Device"
    DefaultDepth 24
    SubSection "Display"
    Depth 24
    Modes "1024x800"
    EndSubSection
EndSection

Sla het bestand op en start het systeem opnieuw op. Als het goed is kun je nu een wezenlijk verschil bemerken op de reactie tijd van je systeem als de computer opnieuw opgestart is.