Mój Alfred – VNC

27/09/2013, 20:33 · · · 0

Jeśli łączycie się z wieloma komputerami korzystając z VNC, a do tego posiadacie Alfreda 2 z PowerPackiem, to zrobiłem coś dla Was.

Workflow, który stworzyłem pozwala na łatwe dodawanie, usuwanie oraz łączenie się z wieloma komputerami przy użyciu systemowej aplikacji Współdzielenie ekranu. Wszystkich zainteresowanych zapraszam do zapoznania się z działaniem i budową tego workflow.

VNC

Jak to działa:

  • Dodawanie komputerów:
    • w oknie Alfreda należy wpisać vnc setup oraz nazwę maszyny i jej numer IP z opcjonalnym podaniem portu, według schematu: Nazwa-numer_IP:port (np. Dom–192.168.1.103:5901)
  • Łączenie się z komputerem:
    • w oknie Alfreda należy wpisać vnc
    • spośród listy wybrać nazwę konkretnej maszyny
    • zostanie otwarta aplikacja Współdzielenie ekranu, która połączy nas z wybranym komputerem
  • Usuwanie komputerów:
    • w oknie Alfreda należy wpisać vnc delete
    • spośród listy wybrać, która maszyna ma być usunięta

Co najważniejsze, nie trzeba pamiętać komend do dodawania lub usuwania komputerów, ponieważ pokażą się po wpisaniu w oknie Alfreda słowa vnc.

Przejdźmy teraz do budowy workflow.

Dodawanie komputerów

Wejście

Elementem wejściowym jest Keyword vnc setup, po którym podaje się nazwę komputera oraz jego adres IP z opcjonalnym podaniem portu według schematu:

Nazwa komputera-adres_IP:port

Na przykład:

Dom–192.168.1.104:5901

Ważne jest rozdzielenie nazwy i adresu IP myślnikiem, inaczej workflow nie będzie prawidłowo działał z podanym komputerem.

Wyjście

Na wyjściu mamy dwa elementy: skrypt i powiadomienie.

Skrypt wygląda następująco:

echo "{query}" >> ./addresses.txt

Jest to prosty zabieg dodający podaną na wejściu nazwę i adres komputera na końcu pliku tekstowego o nazwie addresses.txt.

Powiadomienie wyświetla po prostu informację o dodaniu nazwy i adresu IP nowego komputera.

Usuwanie komputerów

Wejście

Elementem wejściowym jest Filter script. Po wpisaniu w oknie Alfreda słów vnc delete wykonany zostanie poniższy skrypt:

echo '<?xml version="1.0"?><items>'
while read line
do
echo '<item uid="vnc" arg="'$line'">
<title>'${line%-*}'</title>
<subtitle>Delete this machine</subtitle>
<icon>icon.png</icon>
</item>'
done < ./addresses.txt
echo '</items>'

Poniżej objaśnienie kodu:

  • echo '<?xml version="1.0"?><items>’``echo '</items>’ – to początek i koniec składni XML, która odpowiedzialna jest za wyświetlenie poszczególnych komputerów do usunięcia;
  • while read line do done < ./addresses.txt – jest to prosta pętla, która automatycznie wyświetli wszystkie zapisane w pliku addresses.txt komputery. Każda linijka jest przypisywana do zmiennej line;
  • echo '<item uid="vnc" arg="'$line'"> </item> – element item do wyświetlenia poszczególnych komputerów. Opcja arg to inaczej argument przekazywany dalej. Jest nim zmienna $line, czyli cała linijka, w której zapisana jest nazwa komputera i jego adres IP w pliku addresses.txt;
  • <title>'${line%-*}'</title> – element title wyświetla nazwę komputera. Jest to możliwe dzięki ${line%-*}, które „wycina” wszystko, co znajduje się po myślniku (jak pamiętacie, między podawaną nazwą komputera a adresem IP trzeba było taki myślnik wstawić, teraz już wiadomo, dlaczego);
  • <subtitle>Delete this machine</subtitle> – element <subtitle> wyświetla Delete this machine pod nazwą każdego komputera;
  • <icon>icon.png</icon> – element <icon> odpowiedzialny jest za wyświetlenie konkretnej ikony.

Wyjście

Na wyjściu mamy dwa elementy: skrypt i powiadomienie.

Skrypt wygląda następująco:

awk '!/^{query}/' ./addresses.txt > tmp;mv tmp ./addresses.txt

Polega na usunięciu tekstu {query}, który był podany na wejściu jako argument z pliku addresses.txt poprzez tymczasowe zapisanie nowej zawartości do tmp i zamianę nazwy tmp na addresses.txt, czyli podmienienie pliku.

Powiadomienie informuje o usunięciu danego komputera.

Łączenie się z komputerami

Wejście

Elementem wejściowym jest Filter script. Po wpisaniu w oknie Alfreda słów vnc wykonany zostanie poniższy skrypt:

echo '<?xml version="1.0"?><items>'
while read line
do
echo '<item uid="vnc" arg="'${line#*-}'">
<title>'${line%-*}'</title>
<subtitle>Connect with this machine</subtitle>
<icon>icon.png</icon>
</item>'
done < ./addresses.txt
echo '</items>'

Poniżej objaśnienie kodu:

  • echo '<?xml version="1.0"?><items>’echo ’’` – to początek i koniec składni XML, która odpowiedzialna jest za wyświetlenie poszczególnych komputerów do usunięcia;
  • while read line do done < ./addresses.txt – jest to prosta pętla, która automatycznie wyświetli wszystkie zapisane w pliku addresses.txt komputery. Każda linijka jest przypisywana do zmiennej line;
  • echo '<item uid="vnc" arg="'${line#*-}'"> </item> – element item do wyświetlenia poszczególnych komputerów. Opcja arg to argument, którym jest ${line#*-}, czyli zawartość pojedynczej linijki pliku addresses.txt z „wyciętym” tekstem znajdującym się przed myślnikiem, co jak nietrudno się domyśleć da nam sam adres IP z ewentualnym portem, które będą przekazane do wyjścia;
  • <title>'${line%-*}'</title> – element title wyświetla nazwę komputera. Jest to możliwe dzięki ${line%-*}, które „wycina” wszystko, co znajduje się po myślniku (jak pamiętacie, między podawaną nazwą komputera a adresem IP trzeba było taki myślnik wstawić, teraz już wiadomo, dlaczego);
  • <subtitle>Connect with this machine</subtitle> – element <subtitle> wyświetla Connect with this machine pod nazwą każdego komputera;
  • <icon>icon.png</icon> – element <icon> odpowiedzialny jest za wyświetlenie konkretnej ikony.

Wyjście

Elementem wyjścia jest poniższy skrypt:

open vnc://{query}

Korzysta on z możliwości uruchomienia aplikacji przyjmującej adresy vnc://, czyli Współdzielenie ekranu. Otrzymuje ona {query}, czyli otrzymany na wejściu adres IP z ewentualnym portem. Efektem jest nawiązanie połączenia z wybranym komputerem.


Jak do tej pory jest to chyba pierwszy workflow, z którego jestem bardzo dumny (jako osoba nie zajmująca się programowaniem musiałem się nieźle naszukać, jak to wszystko rozwiązać). Jeśli macie jakieś sugestie, w jaki sposób usprawnić ten workflow albo czego mu brakuje, to szczerze zachęcam do udzielenia komentarzy.

Nazwa: VNC
Pobieranie: link

Wszystkie artykuły z serii Mój Alfred
możecie znaleźć pod tym linkiem.



0

Maciej Skrzypczak

Użytkownik sprzętu z nadgryzionym jabłkiem, grafik komputerowy, Redaktor iMagazine.pl. Mastodon: mcskrzypczak@c.im