Mój Alfred – VNC
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 linedodone < ./addresses.txt– jest to prosta pętla, która automatycznie wyświetli wszystkie zapisane w plikuaddresses.txtkomputery. Każda linijka jest przypisywana do zmiennejline;echo '<item uid="vnc" arg="'$line'"></item>– elementitemdo wyświetlenia poszczególnych komputerów. Opcjaargto inaczej argument przekazywany dalej. Jest nim zmienna$line, czyli cała linijka, w której zapisana jest nazwa komputera i jego adres IP w plikuaddresses.txt;<title>'${line%-*}'</title>– elementtitlewyś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świetlaDelete this machinepod 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 linedodone < ./addresses.txt– jest to prosta pętla, która automatycznie wyświetli wszystkie zapisane w plikuaddresses.txtkomputery. Każda linijka jest przypisywana do zmiennejline;echo '<item uid="vnc" arg="'${line#*-}'"></item>– elementitemdo wyświetlenia poszczególnych komputerów. Opcjaargto argument, którym jest${line#*-}, czyli zawartość pojedynczej linijki plikuaddresses.txtz „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>– elementtitlewyś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świetlaConnect with this machinepod 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