Application to notify user of active VNC connection
I want something more visual than Apple’s very subtle binoculars in the top right status menu when there is an active incoming VNC connection to the machine.
Preferably just a floating window notifying the user that there is an active VNC connection, and maybe the IP address. The best solution I have found is running the below command in the Terminal. But that doesn’t really solve my monitoring issue as I actively have to go and find the data.
netstat -a | grep vnc | grep ESTABLISHED
Solution 1:
You always can make this script and run from a terminal
#!/bin/bash
alertme() {
say "Big brother watching"
}
while :
do
netstat -a | grep vnc | grep ESTABLISHED && alertme
sleep 60 #wait 60 seconds
done
and you got a spoken warning. If you save the script with .command
extension, you can start it from the finder by doubleclick.
You can install growl from the Extras directory the growlnotify package. You can change the say in the alertme to:
growlnotify --appIcon TextEdit "Big brother" -m 'watching'
and got an notifying window.
Or, you can make Automator workflow with shell script & popup-window alert. :)
Or, you can use the next:
sudo fs_usage -f network AppleVNCServer | grep -E '(accept|close)'
instead of netstat | grep
and will get exact connect and disconnect times, like next, but you need run it as admin... (sudo).
14:19:20 accept 0.000024 AppleVNCServ
14:19:33 close 0.000047 AppleVNCServ
14:27:01 accept 0.000024 AppleVNCServ
14:28:19 close 0.000055 AppleVNCServ
14:28:26 accept 0.000018 AppleVNCServ
14:28:34 close 0.000037 AppleVNCServ
Solution 2:
Since launchd starts and stops the screen sharing process, you can create a new launchd job that uses a KeepAlive dictionary with an OtherJobEnabled clause to tie your warning tool to the launchd label com.apple.ScreenSharing.server
When ScreenSharing starts, your job will also be started by launchd. (or vice versa if you prefer)
The system job you wish to key is /System/Library/LaunchAgents/com.apple.ScreenSharing.plist
Your plist should go in ~/Library/LaunchAgents
or /Library/LaunchAgents
depending if you only want one user warned, or all users warned. I would also set LimitLoadToSessionType to Aqua.
As mentioned by @jm666 - Growl can make some very pretty notifications with a lot of control and transparency, overlay etc..
growlnotify --appIcon Screen\ Sharing "Screen Sharing" -m "is now active - click to dismiss" -s
You could get very fancy with a shell script to determine the source IP, date and time, log the connection or do all sorts of fun things since launchd has great support for shell scripts as well as full applications.
A quick and dirty Apple Script might be good for testing to be sure launchd is working and you can always polish the presentation later.
osascript -e 'tell application "System Events" to display alert "Incoming VNC session started" as warning buttons {"Cancel", "OK"} default button "OK" cancel button "Cancel" message "Screen Sharing is now active and someone can see and control this Mac until the menu bar icon of \"binoculars inside a monitor\" turns back into binoculars alone. "'
See these links for more info on launchd and AppleScript dialog for reference.