Làm cách nào để chạy tập lệnh khi đăng nhập / đăng xuất trong OS X?


10

Tôi đang đùa giỡn với việc xây dựng một trình quản lý trang trại kết xuất tùy chỉnh và tôi muốn tự động thêm các máy OS X vào trang trại kết xuất khi chúng không được sử dụng.

Có cách nào để kích hoạt tập lệnh để chạy khi bất kỳ người dùng nào đã đăng xuất rồi dừng lại khi bất kỳ người dùng nào đã đăng nhập không?

Câu trả lời:


10

một số cách để chạy tập lệnh khi đăng nhập / đăng xuất trong OS X , một số cách gần đây hơn và chỉ áp dụng cho 10.5 trở lên, một số cách không được chấp nhận, nhưng cách nhanh nhất sẽ là thêm Login Hook.

Đầu tiên, tạo tập lệnh bạn muốn chạy. Mở một Terminal và nhập:

touch ~/script.sh
open -e !$

Điều này sẽ mở một trình soạn thảo văn bản. Nhập tập lệnh, ví dụ với các nội dung sau:

#!/bin/sh
# insert your script here

Lưu các tập tin. Trong thiết bị đầu cuối của bạn, chạy:

chmod +x ~/script.sh

Điều này sẽ làm cho tập tin thực thi. Bây giờ, hãy thêm nó như một cái móc:

sudo defaults write com.apple.loginwindow LoginHook /usr/local/bin/script.sh 

Ngoài ra còn có Logout Hookđối tác:

sudo defaults write com.apple.loginwindow LogoutHook /usr/local/bin/script2.sh

Tôi đã thử nghiệm điều này trên OS X 10.6 và nó sẽ hoạt động thậm chí lên tới 10.8. Hãy nhớ rằng tập lệnh chạy như rootvà chỉ có một hook để đăng nhập và đăng xuất tương ứng.

Để hoàn tác tất cả, nhập

sudo defaults delete com.apple.loginwindow LoginHook
sudo defaults delete com.apple.loginwindow LogoutHook

Lưu ý rằng phương pháp này không được khuyến nghị để triển khai hoặc bất cứ điều gì, nhưng nếu bạn chỉ sử dụng nó như câu hỏi của bạn đã nêu, thì điều đó sẽ không có vấn đề gì.


không hoạt động cho yosemite
davidcondrey

5

Móc đăng nhập đã không được chấp nhận trong 10,4 để ủng hộ launchd. Để chạy một kịch bản khi đăng nhập, hãy lưu một số nguyên như thế này ~/Library/LaunchAgents/test.plist. Nó được tải vào lần đăng nhập tiếp theo ngay cả khi bạn không chạy launchctl load ~/Library/LaunchAgents/test.plist.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd>
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>test</string>
    <key>ProgramArguments</key>
    <array>
        <string>say</string>
        <string>test</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

Để biết thêm thông tin, xem man launchd.plistbài blog này .


Theo bài đăng trên blog được liên kết, điều này sẽ tải plist vào lần đầu tiên bạn đăng nhập và giữ cho nó được tải cho đến khi hệ thống khởi động lại. Làm thế nào để bạn sử dụng launchd để chạy một kịch bản mỗi lần đăng nhập? Hoặc lúc đăng xuất?
ShadSterling

-1

Để các móc này hoạt động trong 10.10, bạn sẽ cần phải làm điều này:

  1. Mở /etc/ttystệp: Trong Finder, chọn Chuyển đến Thư mục từ menu Go, nhập /etc/, sau đó bấm Đi.

  2. Trong cửa sổ kết quả, mở ttystệp trong trình soạn thảo văn bản ưa thích của bạn (chẳng hạn như TextEdit).

  3. Tìm một dòng có nội dung:

    console "/System/Library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow" vt100 on secure window=/System/Library/CoreServices/WindowServer onoption="/usr/libexec/getty std.9600"

  4. Chỉnh sửa dòng này để nó đọc như sau (không có ngắt trong dòng này):

    console "/System/Library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow -LoginHook /path/to/script" vt100 on secure window=/System/Library/CoreServices/WindowServer onoption="/usr/libexec/getty std.9600"

    tức là thêm (nơi là đường dẫn đầy đủ đến tập lệnh mà bạn muốn thực thi khi người dùng đăng nhập) ngay trước dấu ngoặc kép ( ) thứ hai .-LoginHook /path/to/script/path/to/script"

  5. Lưu các tập tin.

Hãy chắc chắn rằng trình soạn thảo văn bản bạn sử dụng để chỉnh sửa tệp này không ngắt dòng trên thành nhiều hơn một dòng.


hoặc làm theo hướng dẫn đầy đủ ở đây:

http://support.apple.com/en-ca/HT2420


không hoạt động cho yosemite
davidcondrey
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.