লগআউট হুক ব্যবহার না করে লগআউটটিতে স্ক্রিপ্ট চালান


11

আমি যখন কোনও ব্যবহারকারী লগ আউট করেছি তখন আমি কয়েকটি ক্লিনআপ কমান্ডগুলি চালনার দিকে নজর রেখেছি, তবে পুরানো লগআউট হুক বৈশিষ্ট্যটি যদিও এখনও কার্যকর রয়েছে, কিছু সময়ের জন্য অবহেলিত হয়েছে তাই আমাদের সাথে আর বেশি সময় থাকতে পারে না।

দুর্ভাগ্যক্রমে, যদিও launchdলগইন হুকগুলির একটি সুবিধাজনক বিকল্প সরবরাহ করে, লগআউট হুকগুলির জন্য এরূপ সুস্পষ্ট প্রতিস্থাপন নেই।

আমি ইতিমধ্যে লগইন-এ চালু হওয়া শেল স্ক্রিপ্ট তৈরি নিয়ে পরীক্ষা-নিরীক্ষা করেছি এবং একটি কিল সিগন্যাল না পাওয়া পর্যন্ত কেবল ঘুমিয়ে যায়, তবে এটি কাজ করে বলে মনে হয় না (স্ক্রিপ্টটি কখনই সাধারণ ক্রিয়াকলাপের সময় সংকেত পায় না)।

অন্যথায় আমি নিশ্চিত নই যে লগআউটটিতে দ্রুত কমান্ড চালানোর সর্বোত্তম উপায়টি কী হবে? আমি জানি কিছু তৃতীয় পক্ষের ইউটিলিটি রয়েছে যা এটি করতে পারে তবে এটি করার কি কোনও "সঠিক" উপায় আছে?

উত্তর:


7

দেখে মনে হচ্ছে অ্যাপল কোনও লগআউট হুক প্রতিস্থাপনে আগ্রহী নয়, কারণ তারা আমার বিষয়ে একটি সম্পর্কে জিজ্ঞাসাবাদ বন্ধ করে দিয়েছে।

তবে, যোসেমাইটের অন্যতম উন্নতি হ'ল এখন চালু করা সঠিকভাবে শেল স্ক্রিপ্টগুলিতে সিগন্যাল প্রেরণ করে। এর অর্থ হ'ল আপনি এখন এর মতো লগ-আউট টাস্কটি করতে পারেন:

এখানে একটি উদাহরণ লগআউট.শ:

#!/bin/sh
onLogout() {
    echo 'Logging out' >> ~/Logs/logout.sh.log
    exit
}

trap 'onLogout' SIGINT SIGHUP SIGTERM
while true; do
    sleep 86400 &
    wait $!
done

এটি কেবলমাত্র ঘুমাবে (অবিচ্ছিন্নভাবে, এটি অ্যাম্পারস্যান্ড ছাড়া সিঙ্ক্রোনালিভাবে কাজ করা মনে হয় না) যতক্ষণ না এটি আটকে থাকা সংকেতগুলির একটি গ্রহণ করে, কোন সময়ে এটি onLogoutকার্য সম্পাদন করবে।

আপনাকে যা করতে হবে তা হ'ল লঞ্চ RunAtLoadএজেন্ট বা লঞ্চ ডেমন ব্যবহার করে স্ক্রিপ্টটি চালু করতে হবে এবং এটি লগ-আউট বা শাটডাউন চলবে, যদিও এটি মনে রাখা গুরুত্বপূর্ণ যে কাজগুলি কেবলমাত্র তার পরিবর্তে মারা যাওয়ার আগেই সম্পূর্ণ করার জন্য সীমিত পরিমাণে সময় থাকে mind , সুতরাং এটি দীর্ঘ সময় লাগে এমন কোনও কিছু চালানোর জন্য ব্যবহার করা উচিত নয়, বা নেটওয়ার্ক সংযোগের প্রয়োজন যা দেরি হতে পারে ইত্যাদি etc.

অবশ্যই এটি মাভারিক্স বা তার আগের কারওর কোনও উপকারে আসে না, তবে যোসামাইটের অধীনে এটি এখন প্রত্যাশার মতো কাজ করছে বলে মনে হয়; তাই আমি আসলে এটি প্রথম স্থানে করছিলাম, launchdকেবল সংকেতগুলি সঠিকভাবে প্রেরণ করা হয়নি :)

দ্রষ্টব্য: এটির জন্য শেল স্ক্রিপ্টগুলি লঞ্চের মাধ্যমে সরাসরি সম্পাদন করা দরকার বলে মনে হয়, যেমন - এটির মাধ্যমে আবেদন করা উচিত নয় sh। সুতরাং এটি যদি ~/Library/Scripts/foo.shআপনার প্রোগ্রামে স্থাপন করা হয় তবে আর্গুমেন্টগুলি দেখতে পারে:

<key>ProgramArguments</key>
<array>
    <string>~/Library/Scripts/foo.sh</string>
    <string>bar</string>
</array>
<key>EnableGlobbing</key>
<true/>

আমি যখন এই স্ক্রিপ্টটি চালাব, এটি ফিরে আসে line 8: syntax error near unexpected token ;'(অর্ধ-কোলনের আগে একটি সমাধি সহ)
জেসন

ওফস, আপনি ঠিক @ জেসন, আমার মনে হয় আমি এটিকে খুব সরল করে দিয়েছি, আমি এটি একটি কার্যকারী উদাহরণের সাথে আরও সাদৃশ্যপূর্ণ হওয়ার জন্য টুইট করেছি aked
হারাভিক্ক

যখন আমি এটি লঞ্চক্টেল ব্যবহার করে আনলোড করি তখন এটি ট্রিগার করে, তবে আমি লগ আউট বা পুনরায় আরম্ভ করার সময় নয়। কেন?
ট্রেলিস

নেটওয়ার্কটি নেমে যাওয়ার আগে কি এটি চালানোর কোনও উপায় আছে?
ফিলিপ্পো

2

আপনি লগইন / লগআউট হুকগুলি চালাতে iHook ব্যবহার করতে পারেন, যা আমি এখনও ইয়োসেমাইটে বাশ এবং পাইথনে লিখিত লাইন আউট-ইন্টারেক্টিভ লগইন এবং লগআউট হুকের জন্য কাজ করতে পেলাম।

http://rsug.itd.umich.edu/software/ihook/


দুর্ভাগ্যক্রমে এটি এখনও হুডের নীচে সাধারণ লগআউট হুক ব্যবহার করে।
0942v8653

0

অন্যরা যারা এখানে অনুসন্ধান ইঞ্জিনগুলি থেকে আসে তারা যদি লগআউট হুক ব্যবহারের বিষয়ে চিন্তা না করে তবে উদাহরণস্বরূপ চালান:

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

তারপরে ~/.logouthookআপনি পরের বার লগ আউট হয়ে যাবেন।

LogoutHookকীটির মান শেল কমান্ডের পরিবর্তে এক্সিকিউটেবলের পথ হতে হবে। defaultsকমান্ড মডিফাই /var/root/Library/Preferences/com.apple.loginwindow.plist


এটিকে যাইহোক বিকল্প হিসাবে দেওয়ার জন্য ধন্যবাদ, তবে আমার উদ্বেগ হ'ল ওএস এক্স এর শেষ কয়েকটি সংস্করণের জন্য লগইন এবং লগআউট হুকগুলি অবচয় করা হয়েছে; যদিও আমি আশা করি তারা এখনও যোসোমেটে কাজ করে (যেহেতু এটি বেশিরভাগ ইউআই এবং ধারাবাহিক পরিবর্তনের উপর দৃষ্টি নিবদ্ধ করে) মনে হয় এটি যে কোনও সময় যেতে পারে, পুরানো প্রারম্ভিক আইটেমগুলি প্রতিস্থাপনের মতো launchd, এটির কোনও লজ্জা RunBeforeUnloadবা অনুরূপ বিকল্প নেই ।
হারাভিক্ক

0

আমি 10.10.1 এ লঞ্চ করা লগআউট আইটেমটি পেতে পারি না, তবে মূলের "com.apple.loginwindow.plist" এর লগআউটহুক কীটি ভালভাবে কাজ করে। লঞ্চ পদ্ধতিটির জন্য অন্য কোনও উদাহরণ রয়েছে?

যাইহোক, আমি লগআউটে সিস্টেমের ভলিউমটি মেরে ফেলতে একটি অ্যাপলস্ক্রিপ্ট লিখেছিলাম যাতে পরবর্তী প্রারম্ভকালে স্টার্টআপ চিম শোনা যায় না। আমি যা কাজ করি নি তা হ'ল একক লগআউটহুক কী এর ভিত্তিতে একাধিক লগআউট কমান্ড পরিচালনার বিবরণ বা একাধিক লগআউটহুক কী সংরক্ষণ করা সম্ভব কিনা, তাই আমি এখনও লঞ্চড পদ্ধতিতে আগ্রহী, যা লিঙ্গনের সাথে পরিচালিত হতে পারে, বা এমনকি লিঙ্গন 3, যা মূলটির থেকে অনেক সংকীর্ণ সুযোগ রয়েছে (সম্ভবত অ্যাপ স্টোরটিতে বিদ্যমান)।

কারেন্ট_ভলকে এতে সেট করুন (শেল স্ক্রিপ্ট "ওসাস্ক্রিপ্ট -e \" আউটপুট ভলিউমের (ভলিউম সেটিংস পান \ "")
যদি বোতামটি ফিরে আসে (আপনি কি ডায়ালগ কথোপকথন "আপনি কি প্রারম্ভকালীন চিমটি নিঃশব্দ করতে চান, এটি পুনরুদ্ধার করতে চান বা বাতিল করতে চান?" বোতামগুলি S "নীরবতা", "পুনরুদ্ধার করুন", "বাতিল"} ডিফল্ট বোতাম 1) "নীরবতা" হয়
    শেল স্ক্রিপ্ট "mkdir -p / usr / স্থানীয় / লগআউটটাস্ক করুন; প্রতিধ্বনি '#! / বিন / বাশ
# লগআউট স্ক্রিপ্ট
osascript -e volume "ভলিউম 0 \ সেট করুন"> / usr / স্থানীয় / লগআউটটাস্ক / লগআউটসক্রিপ্ট; sudo ডিফল্ট com.apple.loginwindow লগআউটহুক / ইউএসআর / স্থানীয় / লগআউটটাস্ক / লগআউটসক্রিপ্ট লিখুন; chmod + x / usr / স্থানীয় / লগআউটটাস্ক / লগআউটস্রিপ্ট "প্রশাসকের অধিকার সহ
আর
    চেষ্টা
        শেল স্ক্রিপ্ট কি প্রশাসকের সুবিধাসহ "sudo ডিফল্ট com.apple.loginwindow লগআউটহুক লিখুন '; rm / usr / স্থানীয় / লগআউটটাস্ক / লগআউটস্রিপ্ট"
        প্রদর্শন কথোপকথন "শাট ডাউন বা পুনরায় চালু করার সময় ভলিউম সেটিংটি 0 এর চেয়ে বেশি হলে স্টার্টআপ চিম শোনা যাবে।" বোতামগুলি {"ঠিক আছে"} ডিফল্ট বোতাম 1
    ত্রুটিতে ত্রুটি_ম্যাসেজ নম্বর ত্রুটি_নম্বর
        যদি ত্রুটি_ সংখ্যাটি 1 হয়
            প্রদর্শনের কথোপকথন "লগআউটটিতে সিস্টেমের ভলিউম শূন্যে সেট করা স্ক্রিপ্টটি উপস্থিত নেই shut বোতামগুলি {"ঠিক আছে"} ডিফল্ট বোতাম 1
        আর
            সংলাপ প্রদর্শন করুন "ত্রুটি:" এবং ত্রুটি_সংখ্যা & "।" এবং ত্রুটি_ম্যাসেজ বোতামগুলি {"ঠিক আছে"} ডিফল্ট বোতাম 1
        শেষ যদি
    শেষ চেষ্টা
শেষ যদি

আপনি কীভাবে লগআউট আইটেমটি চালাচ্ছেন? আমার উদাহরণস্বরূপ শেল স্ক্রিপ্টটি সরাসরি আহ্বান করা উচিত (এর কোনও ব্যবহার নেই sh) সুতরাং এটি সম্পাদনযোগ্য একটি ফাইল হওয়া দরকার, আমি আমার উত্তরে এটি নোট করব।
হারাভিক্ক

আপডেট করার জন্য ধন্যবাদ। আমি যত তাড়াতাড়ি সম্ভব চেষ্টা করব এবং আপনাকে জানাবো।
ট্রেলিস

আমি কেবলমাত্র foo.sh এর অন্তর্ভুক্ত ইভেন্টটি ট্রিগার করতে পারি প্লিজিস্টে "লঞ্চক্টল আনলোড" চালিয়ে যা টার্মিনালে কল করে। লগ আউট এটি ট্রিগার করে না।
ট্রেলিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.