Linux Bash-Skript mit Konsole beim Start öffnen?
Hallo,
es handelt sich hier um Bash-Skripte auf dem Raspberry Pi, falls das einen Unterschied macht. Ich habe bereits ein Skript angelegt, das kann ich auch problemlos mit der Konsole öffnen. Allerdings habe ich gemerkt, dass wenn ich es mit der Maus per Doppelklick öffnen will, dass sich kein Terminal öffnet, so wie ich es will. Ich habe auch bereits versucht, den Schritt mit der Maus zu umgehen (was ich bevorzuge) und das Skript beim Starten des Pi's öffnen zu lassen. Das habe ich so versucht:
sudo systemctl enable rc-local
sudo nano /etc/rc.local
Dort habe ich dann folgendes reingeschrieben:
sudo '/pfad/zum/skript.sh'
Das funktioniert leider auch nicht, ich bitte um Hilfe. :)
3 Antworten
Was soll das Skript machen?
Das passt meinem Verständnis nach alles vom Timing her nicht. rc.local wird abgearbeit, da gibt es noch gar keine Desktop-Umgebung und Du willst ein Terminal? Wie soll das gehen? Was steht in Deinem skript.sh bzw. was ist der Sinn und Zweck.
Ich befürchte, Du willst eigentlich etwas gestartet haben, was in einen Desktop-Manager und dessen Login-/ und Autostart Prozeduren gehört.
Lass uns das mal zusammenfassen: Es soll also so laufen:
- Nutzer logged sich ein
- Desktop Sitzung started
- Terminal Programm geht (automatisch) auf
- Im Terminal selbst wird ein weiteres Programm gestartet, das Eingaben entgegen nehmen kann
- Benutzer kann Eingaben machen bis das Terminal mit - ja wie - beendet wird?
Verstehe ich das richtig?
Eher so:
- Raspberry Pi geht an (ohne Login)
- Terminal mit meinem Skript öffnet sich (für Benutzereingaben)
- Skript startet Aktionen (Slideshow von Bilder und Videos)
Terminal wird (ausschließlich) nur beendet, wenn eine andere Aktion gestartet wird (durch das Skript selbst)
Der Benutzer soll sich automatisch einloggen (ich glaube, das macht er sogar bereits), stell dir das so vor, ich benutze den Raspberry Pi für ein Display im Bilderrahmen, es ist lediglich eine Tastatur angeschlossen, um Zahlen einzugeben (für bestimmte Playlisten von Slideshows), deswegen soll direkt beim Anmachen des Pi's das Skript starten
statt einen Konsole-editor für Eingaben, als Dialog gedacht, wenn du sowieso schon eine grafische Oberfläche am Laufen hast, schau stattdessen mal nach dem Programm "zenity" - welches, aufgerufen z.B. aus einem Script, grafische Dialoge, auch Eingaben, erlaubt.
Andererseits brauchst du für Konsole-Eingaben auch keinen Editor - die Shell kann so etwas bereits, direkt aus dem Script heraus aufrufbar. Inklusive der Möglichkeit, damit Dialoge zu basteln.
Also ich habe es bereits so gemacht, dass ich xterm mit dem Skript aufrufen lassen beim Autostart, da habe ich dann eine startup.desktop oder so angelegt :) Klappt soweit ganz gut. Jetzt habe ich halt nur das Problem, dass ich es nicht schaffe, eine flüssige Bilder-Video-Slideshow abzuspielen und ich habe schon echt viel probiert. vlc ist am flüssigsten, minimiert sich aber manchmal, mpv minimiert sich nicht, aber ist nicht so flüssig von den Videos her, kannst du mir da helfen?
mpv ist gut, und auch prima von Befehlszeile, also Script, steuerbar.
Ausgabedevice von mpv kannst du bestimmen, da ist ein anderes eventuell schneller.
Ja das stimmt, aber leider sind die Videos nicht flüssig genug, hast du da Tipps, wie ich das hinbekomme?
sudo mpv --loop-playlist=inf --image-display-duration=15 --no-border --no-window-dragging --ontop --no-osc --fs --vo=gpu --hwdec=mmal-copy "${files[@]}"
mit --hwdec (also hardware-decoding) und --vo (video-output) habe ich schon rumgespielt und alles ausprobiert, nichts hilft leider... :/
was sicher schneller sein dürfte, aber mit sehr reduzierter Auflösung, wäre, Ausgabe nach ASCII zu konvertieren, mit -vo aa oder caca (benötigen noch installation der libs) - ansonsten hängt das halt sehr von deiner Hardware sowie Treiberunterstützung dafür ab.
-vo xv oder -vo sdl würde ich als die wahrscheinlichsten Kandidaten ansehen.
Okay, mal eine neue Möglichkeit zum Ausprobieren :) Wie genau installiere ich die Libs?
Ich glaube --vo xv und --vo sdl hatte ich schon mal ausprobiert, hatte gar nicht funktioniert, aber müsste ich dafür auch extra etwas installieren?
Woher hast du diese Informationen eigentlich so easy? Ich habe voll lange danach gesucht xD
apt install libcaca0 sollte für caca (farbig im Gegensatz zu aalib) reichen. Da ASCII Grafik, täts das auch auf Konsole, ohne grafische Umgebung.
Woher? Das weiß man halt. Oder man schaut nach. mpv -vo help gibt dir eine Übersicht der unterstützten video outputs.
Ich verwende Linux aber auch nicht erst seit voriger Woche.
Ich muss sagen, bin nicht so der Pro in Linux, kenne das nur von der Uni :) Also die Idee mit ASCII ist echt cool, aber leider nicht das, was ich suche
Wenn ich es mit vlc probiere, also so:
cvlc --loop --fullscreen --no-osd --no-video-title --image-duration=15 --vout x11 "${files[@]}"
dann minimiert sich vlc und man sieht kurzzeitig folgende Fehlermeldung:
[61716a90] mmal_codec decoder: VCSM init succeeded: CMA
[61716a90] main decoder error: buffer deadlock prevented
Den Script in einer grafischen Umgebung wie X11 zu starten erfordert, dass du ein x-terminal startest, worin du den Script dann aufrufst. Dies ohne "sudo", sondern als der User, der auch in die grafische Oberfläche eingelogt ist.
Ein häufig installiertes x terminal ist xterm, und damit würdest du deinen script so starten:
xterm -e /pfad/zu/deinem/script
unter der Annahme, dass du bereits das eXecute bit des scripts gesetzt hast.
Möchtest du direkt den Konsole-Editor starten, rufst du stattdessen den nach -e auf.
(Ich gehe von "grafischer Umgebung" aus, weil du was von "Maus" und "Doppelklick" sagtest)
Grafische Umgebungen kennen auch die Möglichkeit, Scripte und Programme beim Start auszuführen, zu einem Zeitpunkt, dass die grafische Oberfläche bereits läuft (was beim Ausführen von rc.local noch nicht der Fall ist).
- Das Skript muss ausführbar sein! Sonst geht nix!
- ... oder Du sagst dem Rechner mit welcher Shell er das Skript öffnen soll.
sudo sh '/pfad/zum/skript.sh'
Also das Skript habe ich mit:
chmod +x /pfad/zum/skript.sh
ausführbar gemacht
Ach so okay, gut zu wissen. also das Skript soll Benutzereingaben annehmen und danach verarbeiten und weitere Aktionen ausführen. Wenn du mir helfen könntest, wärst du echt meine Rettung