Mac पर UNIX स्क्रिप्ट में वैरिएबल के रूप में रिज़ॉल्यूशन का उपयोग करें और निर्धारित करें


2

मैं मैक के कई प्रकारों के लिए एक NetRestore छवि को तैनात कर रहा हूं: मैकबुक, मैकबुक प्रोस, मैक प्रोस, आईमैक और मैक मिनिस। मेरे पास कई कस्टम डिज़ाइन किए गए लॉगिन स्क्रीन हैं, जिनका मैं उपयोग करना चाहता हूं, लेकिन 10.10 से पहले सब कुछ आवश्यक है कि आप मॉनिटर रिज़ॉल्यूशन को जानते हैं अन्यथा लॉगिन पृष्ठभूमि सही रूप से नहीं दिखाई देगी।

क्या इस कोड के आउटपुट को if/ thenकथनों की श्रृंखला के लिए एक चर के रूप में उपयोग करने का कोई तरीका है ?

system_profiler SPDisplaysDataType |grep Resolution

सामान्य आउटपुट इस तरह दिखाता है

Resolution: 2560 x 1440
Resolution: 1920 x 1200
Resolution: 1920 x 1200

(यह है अगर आपके पास तीन मॉनिटर हैं ... मैं पहले परिणाम का उपयोग करना पसंद करूंगा)।

मेरा इरादा स्क्रिप्ट को चलाने के लिए है जब मैक को सक्रिय निर्देशिका में बाँध दिया जाता है - जिसे मैन्युअल रूप से किया जाना है - इसलिए संकल्प पहले से ही उपलब्ध होना चाहिए। यह सही रिज़ॉल्यूशन छवि का चयन करेगा और फिर इसे आवश्यक स्थान पर कॉपी करेगा।

या संयोग से किसी को भी इस बारे में कोई अच्छा विचार नहीं है कि कस्टम लॉगिन विंडो बैकग्राउंड और यूजर बैकग्राउंड कैसे बनाएं किसी भी प्रकार के मैक पर किसी भी रिज़ॉल्यूशन के साथ काम करने के लिए जैसा कि OS आप सिस्टम फिटमेंट में "फिट टू स्क्रीन" का चयन करते हैं?

जवाबों:


2

ऐसा करने के लिए बहुत सारे तरीके हैं लेकिन यदि आप केवल / ज्यादातर बैश रहना चाहते हैं, तो यहां दो दृष्टिकोण हैं।

  • system_profilerXML के लिए आउटपुट का विकल्प है। आउटपुट को वैरिएबल या फ़ाइल में डालने के लिए इसका उपयोग करें जैसे कि दोहरे उद्धरण शामिल करना सुनिश्चित करें:

    someVar="$(system_profiler SPDisplaysDataType -xml)"
    
  • यह एक सरणी देता है जिसके तहत _itemsबुलाया जाता है _IODisplayEDIDजो डिस्प्ले नाम को _nameऔर रिज़ॉल्यूशन के रूप में सूचीबद्ध करता है_IODisplayEDID

  • यदि आप इसे bash में रखने के लिए प्रतिबद्ध / आवश्यक हैं, तो यहां StackOverflow.com पर एक अच्छी प्रतिक्रिया है कि कैसे XML को bash में पार्स किया जाए कि मैं पुनः प्रिंट नहीं करूंगा। लेकिन इस बिंदु पर आपको XML पार्सर लिंक XMLStartlet का उपयोग करने पर विचार करना चाहिए या xsltprocजो Xcode देव टूल्स में शामिल है।

उस सभी ने कहा, आप अभी भी grepमार्ग पर जा सकते हैं, लेकिन आउटपुट की कुल लंबाई और "रिज़ॉल्यूशन" के प्लेसमेंट पर आपकी रुचि के अनुसार कुछ अनुमान लगाना होगा। यहां मेरे 2 डिस्प्ले सिस्टम के आधार पर एक क्रूड टेस्ट किया गया है:

  • पहले प्रदर्शन नाम प्राप्त करें। नाम में रिक्त स्थान के लिए खाते में करने के लिए, आप अस्थायी रूप से $ आईएफएस रीसेट कर सकते हैं केवल एक नई पंक्ति का उपयोग करने के तो का उपयोग grep -A"प्रदर्शित करता है" के बाद 50 लाइनें (एक guesstimate) प्राप्त करने के लिए, नहीं पहली पंक्ति लौट सकते हैं और जब से वे में खत्म नाम मूल्यों को प्राप्त :( है कि मान्यताओं का एक बहुत बनाने के लिए! )

    IFStemp=${IFS}
    IFS=$'\n'
    var=($(system_profiler SPDisplaysDataType|grep -A 50 \ Displays|grep -v Displays|egrep ':$'))
    
  • फिर इसका उपयोग गेसटेस्ट प्राप्त करने के लिए करें जहां "रिज़ॉल्यूशन" होगा। आप स्पष्ट रूप printfसे एक चर नाम के लिए उप कर सकते हैं, लेकिन मैं आउटपुट दिखाना चाहता था। मैं sedअग्रणी स्थानों को ट्रिम करता था।

    for displayName in ${var[@]}; do
       printf '%s = %s\n' "${displayName%?}" "$(system_profiler SPDisplaysDataType|grep -A 3 "${displayName}"|grep Resolution|sed -e 's/^[[:space:]]*//g' -e 's/Resolution\:\ //g')"
    done
    
  • अब आपको $ IFS रीसेट करें

    IFS=${IFStemp}
    unset IFStemp
    

और यहाँ आउटपुट मेरे लिए कैसा दिखता है:

Color LCD = 2880 x 1800 Retina
DELL 2007WFP = 1920 x 1200 @ 60 Hz
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.