Como você copia algo para a área de transferência ao executar um script acionado pelo incron?

2

Eu tenho um script que funciona perfeitamente quando eu o executo como eu na linha de comando, mas quando o script é executado pelo incron, a linha que copia um valor para a área de transferência não funciona. Basicamente, estou usando o incron para monitorar a adição de um novo arquivo em um diretório específico, em seguida, carrego esse arquivo em um servidor FTP e copio o URL para a área de transferência. Esta é a linha que falha (aparentemente não faz nada) quando o script é executado pelo incron:

echo -n $URL | xclip -selection clipboard

Meu palpite é que o incron não tem acesso à área de transferência da mesma forma que faço como usuário logado, mas não sei o que fazer sobre isso. Qualquer ajuda seria incrível.

    
por Lee 10.06.2015 / 05:55

1 resposta

2

xclip é um aplicativo que precisa de variáveis de ambiente, como $XAUTHORITY e $DISPLAY , para conversar com o servidor X11. Você pode criar um cronjob da aparência da seguinte forma:

/bin/su your_username -c "export XAUTHORITY='/home/your_username/.Xauthority'; export DISPLAY='$(strings /proc/$(pgrep -n Xorg)/environ | awk -F== ' ~ "DISPLAY"{print }')'; echo -n "message" | xclip -selection clipboard"

Use seu próprio nome de usuário em vez de your_username . É uma linha longa, mas cron não aceita várias linhas como entradas de tempo de execução. No entanto, aqui está o que faz:

  • /bin/su your_username : muda o usuário
  • -c "..." : e executa o comando nas cotações
  • export XAUTHORITY='...'; : primeiro precisamos da variável $XAUTHORITY
  • export DISPLAY='...' : e a variável $DISPLAY , isto é principalmente :0 , mas se não, nós podemos pegar a variável do ambiente do processo Xorg
  • echo ... | xclip ... : finalmente, execute o comando desejado nesse ambiente. Não há mais necessidade de usar caminhos absolutos, porque temos um ambiente mínimo agora.
por chaos 10.06.2015 / 09:01