Tips en Trucs 2017

KDE uitbreiden met Servicemenu's

Daar iedereen wel een paar specifieke eisen heeft, wil je extra mogelijkheden aan uw grafische omgeving toevoegen. Ontwikkelaars kunnen onmogelijk alle denkbare opties in de grafische omgeving opnemen. De overdaad aan opties zou de grafische omgeving verschrikkelijk gebruiksonvriendelijk maken. En steeds zullen er gebruikers zijn die iets tekort hebben. Bij open source houdt niemand je tegen om zelf mogelijkheden toe te voegen. Open source ontwikkelaars ontwerpen hun software zo, dat elementen toevoegen eenvoudig mogelijk is.

Onlangs merkte ik bij iemand dat ISO-bestanden openen met VLC het systeem liet vastlopen. Het vastlopen werd veroorzaakt door VLC die 100% van de processorcapaciteit opeiste. Dit kwam enkel voor bij het afspelen van ISO bestanden.

Voor een oplossing ontlasten we VLC door het koppelen van het ISO bestand over te laten aan een ander programma. En inderdaad VLC speelt de film perfect af, zonder de volledige capaciteit van uw processor op te eisen.

ISO bestanden koppelen

Om ISO bestanden te koppelen (mount), heb je normaal root rechten nodig. Via FUSE kunnen ook gewone gebruikers apparaten en/of bestanden koppelen. Het fuseiso pakket zorgt dat gebruikers ISO bestanden kunnen koppelen, installeren gebeurt wel met root rechten, maar is eenmalig:

dany@pindabook:~> sudo zypper install fuseiso 
[sudo] wachtwoord voor root: 
Gegevens van installatiebron laden...
Lezen van geïnstalleerde pakketten...
Pakketafhankelijkheden oplossen...

Het volgende NIEUWE pakket zal worden geïnstalleerd:
  fuseiso

1 nieuw te installeren pakket.
Totale downloadgrootte: 28,8 KiB. Reeds in de cache: 0 B. Na de bewerking zal aanvullend 66,9 KiB worden
gebruikt.
Doorgaan? [j/n/...? alle opties tonen] (j): 
pakket fuseiso-20070708-82.1.x86_64 wordt opgehaald                       (1/1),  28,8 KiB ( 66,9 KiB uitgepakt)
Ophalen: fuseiso-20070708-82.1.x86_64.rpm ..............................................................[gereed]
Controleren op conflicten tussen bestanden: ............................................................[gereed]
(1/1) Installeert: fuseiso-20070708-82.1.x86_64 ........................................................[gereed]

Opnemen in KDE

Gebruikers kunnen nu reeds zelf het ISO bestand koppelen en zo de inhoud ervan gebruiken. Maar minder ervaren gebruikers werken liever met de muis! Eerst vragen we aan Plasma (de nieuwe naam voor KDE, of is het een onderdeel van KDE) waar we onze uitbreiding kunnen plaatsen:

dany@pindabook:~> kf5-config --path services
/home/dany/.local/share/kservices5/:/usr/share/kservices5/

In de eerste map (voor de dubbele punt) komen de uitbreidingen voor de huidige gebruiker (hier dany), in de tweede map kunnen alle gebruikers van de uitbreiding genieten. Wij werken met de gebruikersmap. Deze map bestaat niet op alle systemen, en maken we voor de zekerheid aan. Krijg je een foutmelding, dan bestaat de map reeds:

dany@pindabook:~> mkdir -p .local/share/kservices5

Nu kunnen we met behulp van een desktop bestand onze uitbreiding beschrijven. Dit desktop bestand bevat alle informatie voor KDE (Plasma). Het desktop bestand kan je aanmaken met bijvoorbeeld kate:

dany@pindabook:~> kate .local/share/kservices5/iso-to-vlc.desktop
[Desktop Entry]
Type=Service
Encoding=UTF-8
Version=2.0.2
ServiceTypes=KonqPopupMenu/Plugin,application/x-cd-image
Actions=ISO2VLC;


[Desktop Action ISO2VLC]
Name=ISO afspelen met VLC
Icon=vlc
Exec=iso-to-vlc.sh %U

De eerste sectie bevat algemene informatie. ServiceTypes bevat het mimetype van het bestandtype waarbij dit servicemenu in actie moet treden, in ons geval ISO bestanden. Deze informatie kan je opvragen via Menu Toepassingen en de opdracht Systeeminstellingen. Start de module Toepassingen en selecteer het onderdeel Bestandsassociaties. Typ in het tekstvak .iso. Open de tak application en selecteer een mimetype. Controleer aan de hand van de Bestandsnaampatronen en de Toepassingen voor dit bestandstype of je het juiste mimetype beet hebt. Het volledige mimetype vind je bovenaan het dialoogvenster bij Bestandstype.
Bestandsassociaties
Actions bevat de interne actienaam ISO2VLC. De tweede sectie bevat de informatie voor de actie ISO2VLC. Zo kan je meerdere acties in één desktop bestand plaatsen. Exec bevat de opdracht (commando) dat bij de actie wordt uitgevoerd. Daarbij bevat de variabele %U de URL van het bestand waarop de gebruiker rechts heeft geklikt. In ons geval moeten we nog een script schrijven met de opdrachten die bij de actie uitgevoerd moeten worden:

dany@pindabook:~> kate bin/iso-to-vlc.sh
#!/bin/bash
fname=$(basename "$1")
MOUNTPOINT="${fname%.*}"
fuseiso -p "$1" "$MOUNTPOINT"
vlc dvd://$HOME/"$MOUNTPOINT"
fusermount -u "$MOUNTPOINT"

De variabele $1 bevat het door de gebruiker aangeklikte bestand (%U in het desktop bestand). De eerste opdracht zondert uit de URL (pad + bestandnaam) de bestandnaam af. Bij de tweede opdracht worden alle tekens na de laatste punt verwijderd (.iso) en bewaren we het resultaat in de variabele MOUNTPOINT. In de derde opdracht gebruiken we fuseiso om het door de gebruiker aangeklikte bestand te koppelen aan de map met de naam opgeslagen in de variabele MOUNTPOUNT. Deze map wordt door fuseiso automatisch aangemaakt. Met de vierde opdracht wordt de inhoud van de map met de gekoppelde ISO door VLC afgespeeld. Na het afspelen van de inhoud van het ISO bestand (afsluiten van VLC) wordt de laatste opdracht uitgevoerd om het ISO bestand terug los te koppelen van de map met de naam opgeslagen in de variabele MOUNTPOINT. Deze opdracht verwijdert automatisch de voor de koppeling gebruikte map.

Voorlopig is dit nog een gewoon tekstbestand. Maak het script uitvoerbaar met de opdracht:

dany@pindabook:~> chmod +x bin/iso-to-vlc.sh

Handleiding voor de gebruiker