Can I automatically show keyboard viewer on certain layouts?
OK, building off of a post on SuperUser, here goes:

You can create AppleScripts to change to the various languages. If you make Services that take no input and just call this one script, they'll all live happily in the Services menu when you want them. Otherwise, use your AppleScript trigger method of choice.

To switch to, say, Greek, and bring up the keyboard viewer when you do, run this script:

 tell application "System Events"
     if exists process "Keyboard Viewer" then
         display alert "running"
         try
             tell application "KeyboardViewer" to quit
         end try
     end if
 end tell
 tell application "Finder"
     open item "System:Library:Input Methods:KeyboardViewer.app" of the startup disk
 end tell
 changeKeyboardLayout("Greek")

 on changeKeyboardLayout(layoutName)
     tell application "System Events" to tell process "SystemUIServer"
         tell (1st menu bar item of menu bar 1 whose description is "text input") to {click, click (menu 1's menu item layoutName)}
     end tell
 end changeKeyboardLayout


To switch back to the U.S. layout, killing the viewer when you do, use this:

 tell application "System Events"
     if exists process "Keyboard Viewer" then
         display alert "running"
         try
             tell application "KeyboardViewer" to quit
         end try
     end if
 end tell
 changeKeyboardLayout("U.S.")

 on changeKeyboardLayout(layoutName)
     tell application "System Events" to tell process "SystemUIServer"
         tell (1st menu bar item of menu bar 1 whose description is "text input") to {click, click (menu 1's menu item layoutName)}
     end tell
 end changeKeyboardLayout


Substitute the names of whatever keyboard layouts you want in the changeKeyboardLayout("layout name") command.