Tạo tập lệnh / ứng dụng chạy khi đăng xuất


13

Chúng ta đều biết rằng Mac OS X có chức năng Mục Đăng nhập rất hữu ích cho phép bạn, trong số những thứ khác, thiết lập ứng dụng / tập lệnh để chạy khi bạn đăng nhập.

Tôi đang tìm cách để thiết lập danh sách các tập lệnh / ứng dụng chạy khi tôi đăng xuất . Một danh sách "Các mục đăng xuất", nếu bạn muốn.
Về cơ bản, tôi muốn viết một vài tập lệnh dọn dẹp cho riêng mình, nó sẽ tự động chạy khi tôi đăng xuất hoặc tắt.

Vì vậy, tôi đang tìm cách để một tập lệnh (hoặc lý tưởng nhất là danh sách chúng) tự động được kích hoạt khi tôi đăng xuất. Việc đăng xuất sẽ đợi các tập lệnh kết thúc (giống như cách đăng xuất chờ bạn nhấp vào Lưu nếu ứng dụng yêu cầu).

Có cách nào để tự động kích hoạt (a) tập lệnh khi tôi đăng xuất khỏi Mac OS X không?


Câu trả lời:


7

Móc đăng xuất không được chấp nhận trong 10,4 , nhưng chúng vẫn hoạt động kể từ ngày 10.9.

sudo defaults write com.apple.loginwindow LogoutHook ~/.logouthook
echo $'#!/bin/bash\nsay a' > ~/.logouthook
chmod +x ~/.logouthook

Giá trị của khóa LogoutHook chỉ có thể là đường dẫn đến lệnh thực thi và không phải là lệnh shell. Móc đăng xuất được chạy như root.

Lệnh mặc định sửa đổi /var/root/Lvern/Preferences/com.apple.loginwindow.plist. Thêm khóa LogoutHook vào / L Library /Pferences / com.apple.loginwindow.plist không hoạt động.

Nếu hook logout mất đủ thời gian để chạy, màn hình màu xám sẽ hiển thị cho đến khi hook logout kết thúc. Dường như không có bất kỳ giới hạn thời gian nào sau đó các móc đăng xuất bị buộc phải chấm dứt.

Tôi chưa tìm ra cách nào để chạy các chương trình khi đăng xuất một cách đáng tin cậy với launchd. Khi tôi thử các tín hiệu bẫy như EXIT, mã trong bẫy chỉ chạy khi tôi đăng xuất vào cửa sổ đăng nhập chứ không phải khi tôi tắt hoặc khởi động lại.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//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>bash</string>
    <string>-c</string>
    <string>trap 'echo a>/Users/username/Desktop/a;say a' EXIT;while :;do sleep 10;done</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

Hmm, không ai trong số họ đã làm việc cho tôi. Tôi đã có tập lệnh này , nó hoạt động nếu tôi chạy nó sh(nó tạo tập tin .txt đó). Tôi đã lưu tập lệnh dưới dạng /etc/rc.shutdown.local và tôi đã thêm nó vào defaultsnhư bạn đã nói. Không có tập tin đã ở đó. Tôi có làm điều gì sai? Cảm ơn!
Nathan Greenstein

Tôi không chắc mình có làm gì sai hay không. Tôi đang trên 10.6.8 và LogoutHook không hoạt động. Tôi sẽ đánh giá cao nếu bạn có thể xem ảnh chụp màn hình này và cho tôi biết nếu có gì đó không ổn. Cảm ơn!
Nathan Greenstein

1
Ah! Đó là lần cuối cùng thực hiện thủ thuật vào ngày 10.6.8. Cảm ơn! Mặc dù vậy, một lưu ý: nó không hoạt động với Lion :(
Nathan Greenstein

2
Cả hai phương pháp đều hoạt động tốt trên máy Mountain Lion (10.8.2) của tôi, ngay cả khi tắt hoặc khởi động lại. Lưu ý rằng các hook của LoginHook / LogoutHook chạy trong ngữ cảnh của người dùng root và chúng là các hook đơn, toàn hệ thống và hook hook đăng nhập chạy đồng bộ - sớm hơn nhiều so với các tác nhân khởi chạy cho mỗi người dùng; tương tự, hook logout chạy sớm hơn một tác nhân khởi chạy cho mỗi người dùng sử dụng phương thức bẫy EXIT. Có những trường hợp chỉ có móc làm việc; chẳng hạn, nếu bạn muốn tắt âm thanh khi tắt máy để triệt tiêu âm thanh khởi động của máy Mac, chỉ có LogoutHook hoạt động đáng tin cậy.
mkuity0

1

Thật ra có một cách:

  1. Mở ứng dụng "Script Editor"
  2. Dán

do shell script "PUT YOUR START SCRIPT PATH HERE"

on quit
    do shell script "PUT YOUR STOP SCRIPT PATH HERE"
    continue quit
end quit
  1. Tệp> Lưu, Chọn Ứng dụngLuôn mở sau khi chạy trình xử lý và Lưu
  2. Tùy chọn hệ thống> Người dùng & Nhóm> tab Mục đăng nhập> nút +
  3. Thêm ứng dụng và đánh dấu là Ẩn

Để ẩn nó khỏi Dock:

  1. Nhấp chuột phải vào ứng dụng và chọn Hiển thị nội dung gói
  2. Mở Info.plist và thêm

<key>NSUIElement</key>
<string>1</string>

Thích cái này. Đơn giản và đầy đủ cho nhu cầu của tôi. Và không được tán thành.
Ivan X

0

Script Timer là một lựa chọn tốt cho việc này. Nó có thể chạy khi đăng xuất, đăng nhập, và nhiều hơn nữa. Tôi sẽ đi với điều này cho một giải pháp đơn giản và dễ sử dụng. Nó có một GUI đơn giản:

Hành động kích hoạt

Có hai điều bạn cần lưu ý về Script Timer. Một, nó không miễn phí. Nó có giá 12 đô la, nhưng cá nhân tôi nghĩ rằng nó đáng giá. Hai, nó không tương thích hoàn toàn với Lion, nhưng họ đã hứa sẽ cập nhật miễn phí ngay khi họ làm cho nó tương thích.


1
Điều này không được chấp nhận ngay bây giờ
Kirtikumar A.

0

Bạn cũng có thể tạo một ứng dụng Mac từ tập lệnh của mình bằng cách sử dụng thứ gì đó như Thú mỏ vịt và sau đó thêm nó vào Mục Đăng nhập như bất kỳ ứng dụng nào khác.


0

Power Manager có thể chạy tập lệnh khi người dùng đăng xuất. Đây là một sản phẩm thương mại và nó hỗ trợ macOS mới nhất.

Power Manager chạy tập lệnh khi đăng xuất tác vụ Trợ lý lịch biểu

Các phiên bản trước được yêu cầu sử dụng trình chỉnh sửa sự kiện , nhưng hiện tại có một tác vụ Trợ lý lịch biểu để chạy tập lệnh khi đăng nhập và đăng xuất.

Tôi đã viết Power Manager, vì vậy hãy thoải mái đặt câu hỏi kỹ thuật về việc triển khai nó. Trong trường hợp đăng xuất các sự kiện được kích hoạt, Power Manager không thăm dò các thay đổi về trạng thái người dùng mà thay vào đó được thông báo về các thay đổi của người dùng bằng macOS. Cách tiếp cận này hiệu quả hơn khi có một vòng lặp kịch bản / bỏ phiếu.

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.