Nautilus-Skripte zum Kontextmenü/zu den Aktionen hinzufügen

Nautilus-Skripte zum Kontextmenü/zu den Aktionen hinzufügen

Für einen Kurs über Betriebssysteme, den ich belege, habe ich mich dafür entschieden, ein benutzerdefiniertes FTP-ähnliches Programm in das Rechtsklickmenü zu integrieren (in C geschrieben) und hatte Probleme damit, die von mir erstellten Skripte so anzuzeigen und funktionieren zu lassen, wie ich es möchte.

Das Ziel ist, es so gut wie möglich in das Betriebssystem integriert erscheinen zu lassen. Ich habe ein Thema gefunden, in dem beschrieben wird, wie man eine Aktion in das normale Rechtsklickmenü einfügt, aber ich hatte Probleme, meine Nautilus-Skripte richtig zum Laufen zu bringen.

Das Problem besteht darin, dass selbst wenn sich das Skript in den Nautilus-Skriptordnern befindet, die Ausführung in einer Nautilus-Aktion die Dateiauswahlvariablen ( NAUTILUS_SCRIPT_SELECTED_FILE_PATHS) nicht ausfüllt, die das Skript zum Ausführen meines Programms benötigt. Die Ausführung über das Skriptmenü funktioniert jedoch. Ich würde gerne wissen, ob dies funktionieren kann.

Dies wird angezeigt, wenn keine Dateien ausgewählt wurden, da dadurch mein Programm zum Empfangen der Dateien gestartet wird. Ich muss dies tun, um den Ordner, in den ich mit der rechten Maustaste geklickt habe, wenn möglich abrufen zu können:

Empfangen-Schaltfläche im Rechtsklickmenü

Dies wird angezeigt, wenn einige Dateien ausgewählt sind. Ich muss in der Lage sein, die Liste der ausgewählten Dateien abzurufen, damit mein Programm weiß, welche Dateien gesendet werden sollen:

Schaltfläche „Senden“ im Rechtsklickmenü

Was ich derzeit tun muss, ist, das Skriptmenü zu verwenden. Dies ist nicht wünschenswert, da das Skriptmenü nur angezeigt wird, wenn ein Element ausgewählt ist:

Was ich derzeit tun muss, ist das Skriptmenü

Ist das, was ich tun möchte, möglich?

Zusätzliche Informationen: Das Programm zum Senden/Empfangen ist ein von mir geschriebener Socket-Server. Mir ist bewusst, dass ich es mit einem einfachen Bash-FTP wahrscheinlich viel einfacher machen könnte, aber ich glaube nicht, dass mein Prof bei einem Semesterprojekt von einer 4-zeiligen Lösung beeindruckt wäre.

Ich schreibe die Skripte in Bash.

Hier ist ein Beispiel des Bash-Codes:

#!/bin/bash

echo Hello World!
IP=$(zenity --entry --text "What is the IP you want?" --entry-text "")
PORT=$(zenity --entry --text "What is the PORT you want?" --entry-text "3000")
for file in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
    do
                zenity --info --text $file
        /home/admin/fileSending/clientRecieve $IP $PORT "$file"
done

echo $IP

Antwort1

Ich habe die Antwort herausgefunden. Kurz gesagt, Sie müssen die Parameter verwenden, um Ihre Variablen anzugeben. Der Parameter %bübergibt den Dateinamen als Befehlszeilenargument, auf das über das "$1"erste Argument zugegriffen werden kann. In diesem Fall erhalten Sie alle Dateien als separate Argumente, sodass Sie usw. %Bbenötigen ."$1" "$2"

Sie können auch verwenden, $PWDum das aktuelle Arbeitsverzeichnis abzurufen. Es gibt jedoch einige wichtige Dinge, die Sie dabei beachten sollten, da das aktuelle Arbeitsverzeichnis nicht immer das ist, was Sie vielleicht denken. Wenn Sie beispielsweise eine Datei im Ordner ausgewählt haben, /home/admin/myStuff/test.txtist das Arbeitsverzeichnis des Skripts /home/admin/myStuff. Sie können daher verwenden, "$PWD/$1"um das aktuelle Arbeitsverzeichnis + /+ die ausgewählte Datei abzurufen. Der Code lautet wie folgt

#!/bin/bash
#Author: Thomas Migus, created on March 20th 2018
#this is a script that runs the client that will send the file.
FILE="$PWD/$1"
IP=$(zenity --entry --text "What is the IP you want?" --entry-text "127.0.0.1")
PORT=$(zenity --entry --text "What is the IP you want?" --entry-text "3000")
/home/admin/fileSending/clientSend $IP $PORT $FILE
zenity --info --text "File sent"

Wenn Sie keinen Ordner ausgewählt haben, ändert sich der Arbeitsordner. Wenn Sie beispielsweise mit der rechten Maustaste auf einen leeren Bereich im /home/admin/myStuffArbeitsordner klicken, wird dies /home/adminNICHT/home/admin/myStuff

Um das Arbeitsverzeichnis auszuwählen, können Sie verwenden, %bum herauszufinden, in welchem ​​Verzeichnis Sie sich tatsächlich befinden. Der Code lautet wie folgt:

#!/bin/bash
#Author: Thomas Migus, created on March 20th 2018
# This is a script which runs the server
OUTPUT="$PWD/$1/"
PORT=$(zenity --entry --text "What is the port number?" --entry-text "3000")
/home/admin/fileSending/serverRecieve $PORT $OUTPUT
zenity --info --text "File recieved"

Sie können es mit diesem kleinen Skript selbst testen

#!/bin/bash
zenity --info --text "$1"
zenity --info --text "$PWD"

verwandte Informationen