ฉันต้องการเรียกใช้บางอย่างเช่น "sleep 3600; logout" แต่คำสั่ง logout bash จะปิดเทอร์มินัลปัจจุบันเท่านั้น ฉันจะปิดเซสชัน Mac OS X ทั้งหมดได้อย่างไร
ฉันต้องการเรียกใช้บางอย่างเช่น "sleep 3600; logout" แต่คำสั่ง logout bash จะปิดเทอร์มินัลปัจจุบันเท่านั้น ฉันจะปิดเซสชัน Mac OS X ทั้งหมดได้อย่างไร
คำตอบ:
Applescript ต่อไปนี้จะออกจากระบบผู้ใช้ปัจจุบัน:
tell application "System Events" to log out
คุณสามารถสรุปได้ด้วย bash alias โดยใช้osascript
คำสั่ง:
alias maclogout="osascript -e 'tell application \"System Events\" to log out'"
มันเหมือนกับการคลิก "> ออกจากระบบ [ชื่อผู้ใช้] ... " และจะออกจากระบบหลังจากรอ 2 นาที
นี้รวมกับsleep
คำสั่งได้อย่างง่ายดาย:
alias delayedlogout="sleep 3600; maclogout"
.. หรืออาจรวมกันเป็นชื่อแทนเดียว:
alias delayedlogout="sleep 3600; osascript -e 'tell application \"System Events\" to log out'"
alias maclogout="..."
ไม่มีวิธี "ดี" ในการบันทึกผู้ใช้ปัจจุบันออกจากเทอร์มินัลใน OS X วิธีที่ยุ่งเหยิงคือการฆ่าloginwindow
กระบวนการของผู้ใช้ มันจะฆ่ากระบวนการทั้งหมด (โปรแกรม) ที่ทำงานอยู่ภายใต้ชื่อผู้ใช้ของคุณ
การทำเช่นนี้เป็นกระบวนการสองขั้นตอน
ในเทอร์มินัลเรียกใช้สิ่งนี้:
ps -Ajc | grep loginwindow
จากนั้นเรียกใช้
sudo kill <pid>
โดย<pid>
ที่หมายเลขแรก (คอลัมน์ที่สอง) จากเอาต์พุตจากคำสั่งด้านบน
ใช้ sudo kill -9 เพื่อบังคับให้ kill กระบวนการที่ฉันต้องทำเพื่อให้มันใช้งานได้
ตัวอย่างเช่นถ้าเมื่อเอาต์พุตไปยังคำสั่งแรกคือ:
joshhunt 41 1 41 5e15c08 0 Ss ?? 3:13.09 loginwindow
จากนั้นฉันจะเรียกใช้sudo kill 41
ป้อนรหัสผ่านแล้วออกจากระบบ
สิ่งนี้สามารถรวมกันเป็นนามแฝงทุบตี:
alias messylogout="ps -Ajc | grep loginwindow | grep -v grep | awk '{print \$2}' | sudo xargs kill"
sudo killall loginwindow
ไม่ได้เหรอ อย่างน้อยใน 10.7 loginwindow
กระบวนการดูเหมือนว่าจะเปิดอีกครั้งทันทีแม้ว่า
ฉันรู้ว่านี่เป็นคำถามเก่า แต่ช่วยฉันได้คำสั่งที่ฉันต้องการใน OS X 10.8 คือ:
ps -Ajc | grep loginwindow | awk '{print $2}' | sudo xargs kill -9
awk
คำสั่งที่แตกต่างกันและkill -9
เพื่อให้แน่ใจพรอมต์เข้าสู่ระบบแสดง
ฉันคิดว่าฉันได้พบคำตอบวิธีการอย่างสง่างามออกจากระบบของ Mac OS X โดยไม่ต้องรอ 2 นาที
ฉันพบว่าการกด Shift, ตัวเลือกและคำสั่งและการกด "q" จะออกจากระบบอย่างสง่างามและไม่ถาม "ถ้าคุณต้องการออกจากระบบ"
ดังนั้นฉันจึงเขียนรหัส AppleScript ผ่าน Automator ไปที่:
tell application "System Events"
keystroke "q" using {command down, shift down, option down}
end tell
หากคุณเข้าสู่เชลล์เป็นผู้ใช้คนเดียวกับที่ล็อกอินเข้าสู่ gui ของ mac คุณสามารถออกคำสั่ง sudo-less ได้launchctl reboot logout
ซึ่งเป็นการออกจากระบบของผู้ใช้อย่างมีประสิทธิภาพ มันมีข้อแม้ที่ไม่อนุญาตให้แอปที่กำลังออกจากการกระตุ้นให้มีการโต้ตอบในขณะที่เลิกอย่างไรก็ตามไม่ได้หมายความว่านี่เป็นสิ่งเดียวกับการฆ่าพวกเขาโดยสิ้นเชิงในฐานะkill
(SIG TERM) หรือkill -9
(SIG KILL)
ฉันขอยืนยันว่าวิธีที่ "ดีที่สุด" โพสต์ OS X 10.9 อาจเป็น launchctl gui/$(id -u <username>) bootout
เอกสารประกอบการโพสต์ OS X 10.9 สำหรับ launchctl พบได้โดยการรันlaunchctl help
แต่โดยพื้นฐานแล้วคำสั่งข้างต้นจะทำให้เซสชันชั่วคราวของผู้ใช้ขาด ทางเลือกอื่นจะทำการlaunchctl user/$(id -u <username>) bootout
ลบเซสชันถาวรที่รัน daemons ของผู้ใช้ในขณะที่ผู้ใช้ไม่ได้ลงชื่อเข้าใช้
สิ่งนี้สามารถทดสอบได้โดยการเรียกใช้launchctl gui/$(id -u) bootout
ซึ่งจะทำให้คุณออกจากระบบทันทีและทำให้ระบบแสดงหน้าต่างการเข้าสู่ระบบ (ด้วยความล่าช้า)
sudo launchctl bootout gui/XXX
ที่ซึ่งXXX
เป็น ID ผู้ใช้ที่เป็นตัวเลข (UID) โปรดทราบว่า i) คำbootout
สั่งย่อยมาก่อนและ ii) $(id)
ส่งคืนมากกว่า UID มาก
ยูทิลิตี้ที่ดีในการเพิ่มไปยังเทอร์มินัลของคุณคือคำสั่งlogoutที่จะใช้เช่น:
logout UserName
นี่คือวิธีการ:
แก้ไข. bash_profile ของคุณ
nano ~/.bash_profile
เพิ่มบรรทัดนี้:
logout() {sudo launchctl bootout user/$(id -u "$1")}
บันทึกไฟล์กด ctrl+x
รีสตาร์ทเครื่อง
คุณพร้อมที่จะไป;)