Never been to CodeSnippets before?

Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world (or not, you can keep them private!)

Creating login & logout scripts on Mac OS X (See related posts)

# Mac OS X: Creating a login hook, 
# http://support.apple.com/kb/HT2420
# cf. also http://www.bombich.com/mactips/loginhooks.html

# LoginHook
echo $'#!/bin/sh\n/usr/bin/logger -i "LoginHook"\nexit 0\n' > ~/Desktop/login.sh
/bin/chmod 0750 ~/Desktop/login.sh
#/bin/chmod 0500 ~/Desktop/login.sh
/bin/ls -l ~/Desktop/login.sh
/usr/bin/sudo /usr/bin/defaults write com.apple.loginwindow LoginHook "/Users/$(/usr/bin/logname)/Desktop/login.sh"
/usr/bin/sudo /bin/ls -l /private/var/root/Library/Preferences/com.apple.loginwindow.plist
/usr/bin/sudo /usr/bin/defaults read /private/var/root/Library/Preferences/com.apple.loginwindow LoginHook

# LogoutHook
echo $'#!/bin/sh\n/usr/bin/logger -i "LogoutHook"\nexit 0\n' > ~/Desktop/logout.sh
/bin/chmod 0750 ~/Desktop/logout.sh
#/bin/chmod 0500 ~/Desktop/logout.sh
/bin/ls -l ~/Desktop/logout.sh
/usr/bin/sudo /usr/bin/defaults write com.apple.loginwindow LogoutHook "/Users/$(/usr/bin/logname)/Desktop/logout.sh"
/usr/bin/sudo /bin/ls -l /private/var/root/Library/Preferences/com.apple.loginwindow.plist
/usr/bin/sudo /usr/bin/defaults read /private/var/root/Library/Preferences/com.apple.loginwindow LogoutHook


# now logout & login again
# cf. also  http://codesnippets.joyent.com/posts/show/1591

open -a Console /private/var/log/system.log


# disable login & logout hook again
/usr/bin/sudo /usr/bin/defaults delete com.apple.loginwindow LoginHook
/usr/bin/sudo /usr/bin/defaults delete com.apple.loginwindow LogoutHook

rm -i ~/Desktop/login.sh
rm -i ~/Desktop/logout.sh


#---------------------------------------------------


LogInHookDir="/Library/LoginScript"
/usr/bin/sudo /bin/mkdir -p "$LogInHookDir"

(
/bin/cat <<-'EOF'
#!/bin/bash
/usr/bin/logger -i "id: $(/usr/bin/id)"
/usr/bin/logger -i "short name of the user who is logging in: $1"
/usr/bin/logger -i "SHELL: $SHELL"
/usr/bin/logger -i "BASH: $BASH"
/usr/bin/logger -i "users:  $(/usr/bin/users)"
/usr/bin/logger -i "groups:  $(/usr/bin/groups)"    # /usr/bin/id -Gn
/usr/bin/logger -i "logname:  $(/usr/bin/logname)"
/usr/bin/logger -i "whoami:  $(/usr/bin/whoami)"   # /usr/bin/id -un
exit 0
EOF
) | /usr/bin/sudo /bin/cp /dev/stdin "${LogInHookDir}/loginhook.sh"

#/usr/bin/sudo /bin/chmod 1755 "${LogInHookDir}"
#/usr/bin/sudo /bin/chmod 0744 "${LogInHookDir}/loginhook.sh"

/usr/bin/sudo /bin/chmod 1544 "${LogInHookDir}"
/usr/bin/sudo /bin/chmod 0544 "${LogInHookDir}/loginhook.sh"

/usr/bin/sudo /usr/bin/nano "${LogInHookDir}/loginhook.sh"

# cf. dirmodes, http://codesnippets.joyent.com/posts/show/1402
dirmodes "$LogInHookDir"

ls -ld "${LogInHookDir}"
/usr/bin/sudo /bin/ls -l "${LogInHookDir}/loginhook.sh"

/usr/bin/sudo /usr/bin/defaults write com.apple.loginwindow LoginHook "${LogInHookDir}/loginhook.sh"
/usr/bin/sudo /usr/bin/defaults read /private/var/root/Library/Preferences/com.apple.loginwindow LoginHook

# now logout & login again
# cf. also  http://codesnippets.joyent.com/posts/show/1591

open -a Console /private/var/log/system.log



Comments on this post

brunerd posts on Dec 03, 2008 at 22:00
Scripts launched by loginwindow are run as root.
So make sure you put these scripts someplace secure.
The Desktop of a standard user is a security risk for sure.

For more info:
http://developer.apple.com/documentation/MacOSX/Conceptual/BPSystemStartup/Articles/CustomLogin.html#//apple_ref/doc/uid/20002134-111735
jvs posts on Dec 09, 2008 at 23:26
I've added yet another login script example and put it into /Library/LoginScript. Thanks.

You need to create an account or log in to post comments to this site.