วิธีรันสคริปต์เมื่อเข้าสู่ระบบ / ออกจากระบบใน OS X


10

ฉันกำลังเล่นกับผู้จัดการฟาร์มเรนเดอร์แบบกำหนดเองและฉันต้องการเพิ่มเครื่อง OS X ลงในฟาร์มเรนเดอร์โดยอัตโนมัติเมื่อไม่ได้ใช้งาน

มีวิธีที่จะทริกเกอร์สคริปต์ให้ทำงานเมื่อผู้ใช้รายใดออกจากระบบแล้วหยุดเมื่อผู้ใช้รายใดเข้าสู่ระบบหรือไม่?

คำตอบ:


10

มีหลายวิธีที่จะเรียกใช้สคริปต์ที่เข้าสู่ระบบ / ออกจากระบบใน OS Xบางเมื่อเร็ว ๆ นี้และจะนำไปใช้ 10.5 และสูงกว่าบางคนเลิกค่อนข้าง Login Hookแต่หนึ่งที่เร็วที่สุดที่จะเพิ่ม

ก่อนอื่นให้สร้างสคริปต์ที่คุณต้องการเรียกใช้ เปิด Terminal และป้อน:

touch ~/script.sh
open -e !$

จะเป็นการเปิดโปรแกรมแก้ไขข้อความ ป้อนสคริปต์เช่นมีเนื้อหาดังต่อไปนี้:

#!/bin/sh
# insert your script here

บันทึกไฟล์ ในเทอร์มินัลของคุณให้เรียกใช้:

chmod +x ~/script.sh

สิ่งนี้จะทำให้ไฟล์ปฏิบัติการได้ ตอนนี้ให้เพิ่มมันเป็นตะขอ:

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

นอกจากนี้ยังมีLogout Hookสำเนา:

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

ฉันได้ทดสอบสิ่งนี้ใน OS X 10.6 แล้วและควรจะทำงานได้ถึง 10.8 โปรดทราบว่าสคริปต์ทำงานเป็นrootและมีเบ็ดเดียวสำหรับการเข้าสู่ระบบและออกจากระบบตามลำดับ

หากต้องการยกเลิกทั้งหมดให้ป้อน

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

โปรดทราบว่าวิธีนี้ไม่แนะนำสำหรับการปรับใช้หรือสิ่งใด ๆ แต่ถ้าคุณใช้เพียงอย่างเดียวกับคำถามของคุณที่ระบุว่าไม่น่ามีปัญหา


ไม่ทำงานสำหรับโยเซมิตี
davidcondrey

5

การเข้าสู่ระบบ hooks ถูกเลิกใช้ใน 10.4 เพื่อสนับสนุน launchd เมื่อต้องการเรียกใช้สคริปต์ที่เข้าสู่ระบบบันทึก plist ~/Library/LaunchAgents/test.plistเช่นนี้เป็น 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>

สำหรับข้อมูลเพิ่มเติมโปรดดูman launchd.plistและโพสต์บล็อกนี้


ตามการโพสต์บล็อกที่เชื่อมโยงนี้จะโหลด Plist ในครั้งแรกที่คุณเข้าสู่ระบบและให้มันโหลดจนกว่าระบบจะเริ่มต้นใหม่ คุณใช้ launchd เพื่อรันสคริปต์ในทุกการล็อกอินได้อย่างไร หรือออกจากระบบ?
ShadSterling

-1

เพื่อให้ hooks เหล่านี้ทำงานได้ใน 10.10 คุณจะต้องทำสิ่งนี้:

  1. เปิด/etc/ttysไฟล์: ใน Finder ให้เลือกไปที่โฟลเดอร์จากเมนูไปพิมพ์/etc/จากนั้นคลิกไป

  2. ในหน้าต่างที่ปรากฏขึ้นให้เปิดttysไฟล์ในโปรแกรมแก้ไขข้อความที่คุณต้องการ (เช่น TextEdit)

  3. ค้นหาบรรทัดที่อ่าน:

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

  4. แก้ไขบรรทัดนี้เพื่อให้อ่านได้ดังต่อไปนี้ (ไม่มีตัวแบ่งในบรรทัดนี้):

    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"

    เช่นเพิ่ม(โดยที่เส้นทางแบบเต็มไปยังสคริปต์ที่คุณต้องการดำเนินการเมื่อผู้ใช้เข้าสู่ระบบ) ก่อนหน้าเครื่องหมายอัญประกาศคู่ ( )-LoginHook /path/to/script/path/to/script"

  5. บันทึกไฟล์

ตรวจสอบให้แน่ใจว่าตัวแก้ไขข้อความที่คุณใช้แก้ไขไฟล์นี้ไม่ได้แบ่งบรรทัดด้านบนออกเป็นมากกว่าหนึ่งบรรทัด


หรือทำตามคำแนะนำทั้งหมดที่นี่:

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


ไม่ทำงานสำหรับโยเซมิตี
davidcondrey
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.