Adicione scripts Nautilus ao menu/ações de contexto

Adicione scripts Nautilus ao menu/ações de contexto

Então, para um curso que estou fazendo em sistemas operacionais, optei por integrar um programa personalizado semelhante a FTP no menu do botão direito (escrito em C) e tenho tido problemas ao tentar obter os scripts que fiz. aparecem e funcionam do jeito que eu quero.

O objetivo é fazer com que pareça o mais integrado possível ao sistema operacional. Encontrei um tópico sobre como adicionar uma ação no menu normal do botão direito, mas estou tendo problemas para fazer meus scripts do Nautilus funcionarem corretamente.

O problema surge que mesmo com o script nas pastas de script do nautilus, executá-lo em uma ação do nautilus não preenche as variáveis ​​de seleção de arquivo ( NAUTILUS_SCRIPT_SELECTED_FILE_PATHS) que o script precisa para executar meu programa. No entanto, executá-los através do menu de scripts sim. Gostaria de saber se é possível que isso funcione?

Isso aparece quando nenhum arquivo foi selecionado, pois isso iniciará meu programa para receber os arquivos. Preciso fazer isso para poder obter a pasta em que cliquei com o botão direito, se possível:

Botão de recebimento, localizado no menu do botão direito

Isso aparece quando alguns arquivos são selecionados, preciso conseguir a lista dos selecionados para que meu programa saiba quais arquivos enviar:

Botão Enviar, localizado no menu do botão direito

O que tenho que fazer atualmente é usar o menu de scripts. Isso é indesejável porque o menu de scripts só aparece quando um item é selecionado:

O que tenho que fazer atualmente é usar o menu de scripts

O que eu quero fazer é possível?

Informações adicionais: O programa para enviá-los/recebê-los é um servidor de soquete que escrevi, estou ciente de que provavelmente poderia fazer isso muito mais facilmente com um simples bash FTP, mas não, meu professor ficaria impressionado com uma solução de 4 linhas em um projeto de prazo.

Estou escrevendo os scripts no bash.

Aqui está um exemplo do código bash:

#!/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

Responder1

Eu descobri a resposta, resumindo, você precisa usar os parâmetros para dar suas variáveis. O parâmetro %bentrega o nome do arquivo como um argumento de linha de comando que pode ser acessado através do "$1"primeiro argumento. no caso disso, %Bvocê receberá todos os arquivos como argumentos separados, então você precisará "$1" "$2"de etc ...

Você também pode usar $PWDpara obter o diretório de trabalho atual. NO ENTANTO, há algumas coisas importantes a serem observadas sobre isso, já que o diretório de trabalho atual nem sempre é o que você imagina. Quando você seleciona um arquivo na pasta, digamos, /home/admin/myStuff/test.txto diretório de trabalho do script será /home/admin/myStuff. Você pode, portanto, usar "$PWD/$1"para obter o diretório de trabalho atual + /+ o arquivo selecionado. O código é o seguinte

#!/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"

Quando você não seleciona uma pasta, o diretor de trabalho muda. Digamos que você clique com o botão direito no espaço vazio dentro do diretório de trabalho NÃO /home/admin/myStuffserá/home/admin/home/admin/myStuff

Para selecionar o diretório de trabalho, você pode usar %bpara obter em qual diretório você realmente está. O código é o seguinte:

#!/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"

você mesmo pode testar com este pequeno script

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

informação relacionada