অন্য ব্যবহারকারীর গ্রাফিকাল সেশনে জিইউআই অ্যাপ্লিকেশন কীভাবে চালু করবেন?


15

আমি ব্যবহারকারীর গ্রাফিকাল সেশনে ইন্টারঅ্যাক্টিভভাবে লগইন হওয়া অন্য একজন ব্যবহারকারী হিসাবে জিইউআই অ্যাপ্লিকেশনটি কীভাবে চালু করব তা বোঝার চেষ্টা করছি।

উদাহরণস্বরূপ, বলুন আমার দুটি ব্যবহারকারী আছে, ফু এবং বার। দু'জনই লগইন করেছেন তবে বর্তমান ইন্টারেক্টিভ ব্যবহারকারী ভুগছেন। আমি ক্যালকুলেটর.এপ ব্যবহারকারীর "বার" হিসাবে চালু করতে চাই, যাতে যখন আমি দ্রুত ব্যবহারকারী বারে স্যুইচ করি তখন আমি দেখতে পাই যে বারের সেশনে ক্যালকুলেটর উইন্ডো খোলা আছে।

এখানে আমি চেষ্টা করেছি যা কাজ করে না:

sudo -u bar /Applications/Calculator.app/Contents/MacOS/Calculator

এটি ক্যালকুলেটর.এপ বার হিসাবে চালু করে, তবে উইন্ডোটি ফু এর গ্রাফিকাল সেশনে খোলে।

sudo -u bar osascript -e "tell application \"Calculator\" to activate"

একই প্রভাব।

sudo -u bar open "/Applications/Calculator.app"

কুলকুলেটরকে বার হিসাবে নয়, ফু হিসাবে শুরু করে।

launchctl asuser [uid of bar] [any of the above commands]

একই প্রভাব।

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

দ্রষ্টব্য: আমি সচেতন যে এটি দূরবর্তী অ্যাপল ইভেন্টগুলি ব্যবহার করা সম্ভব, তবে আমি এটি ব্যবহার করতে পারি না যেহেতু যে পরিস্থিতিতে আমি এটি করার চেষ্টা করছি তা আমার ভাগ্য পছন্দ করে না যে "রিমোট অ্যাপল ইভেন্টগুলি" সক্ষম হবে।

কোন সাহায্যের ব্যাপকভাবে প্রশংসা হবে!


1
আপনি কি openকমান্ডটি ব্যবহার করে দেখেছেন SSH?
ম্যাথিউ রিগলার

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

আমি মনে করি এই ধাঁধার একটি অংশে -psn কমান্ড লাইন যুক্তি জড়িত থাকতে পারে, যা ওএস কিছু পরিস্থিতিতে যুক্ত করে। ওএস এক্স-তে কোনও কোড পোর্ট করার সময় অতীতেও আমি এর মুখোমুখি হয়েছি this এই প্রশ্নটি এবং এটি উল্লেখ করে অ্যাপল ডকুমেন্টেশন দেখুন ।
অ্যাশলে

শেষ পর্যন্ত 10.10 হিসাবে বেলো উল্লিখিত বিসেক্সেক পুরোপুরি কাজ করে
হোফি

উত্তর:


7

আপনি যা অর্জন করতে চান তা সম্ভব তবে কঠিন। আপনার উপযুক্ত ব্যবহারকারী সেশনের মধ্যে অ্যাপ্লিকেশনটি চালু করতে হবে launch সুরক্ষার কারণে, ব্যবহারকারী সেশন বিভাজকটি অতিক্রম করা কঠিন।

আপনার অনুরোধটি শোনার জন্য এবং আপনার পক্ষে অ্যাপ্লিকেশনটি চালু করতে আপনার ইতিমধ্যে অন্য ব্যবহারকারীর অধিবেশন চলমান একটি প্রক্রিয়া দরকার।

প্রবর্তিত এর bsexec

ধন্যবাদ, সাম্প্রতিক সংস্করণগুলির launchdএই ক্ষমতা রয়েছে; যদিও অ্যাপল ইঞ্জিনিয়াররা এর সাধারণ ব্যবহারের সুপারিশ করেনি। যথাযথ ব্যবহারকারীর সেশনটি লক্ষ্যবস্তু করার জন্য লঞ্চকটিতেbsexec বিকল্পটি ব্যবহার করুন :

 bslist [PID | ..] [-j]
          This prints out Mach bootstrap services and their respective states. While the namespace
          appears flat, it is in fact hierarchical, thus allowing for certain services to be only avail-
          able to a subset of processes. The three states a service can be in are active ("A"), inactive
          ("I") and on-demand ("D").

          If [PID] is specified, print the Mach bootstrap services available to that PID. If [..] is
          specified, print the Mach bootstrap services available in the parent of the current bootstrap.
          Note that in Mac OS X v10.6, the per-user Mach bootstrap namespace is flat, so you will only
          see a different set of services in a per-user bootstrap if you are in an explicitly-created
          bootstrap subset.

          If [-j] is specified, each service name will be followed by the name of the job which regis-
          tered it.

 bsexec PID command [args]
          This executes the given command in the same Mach bootstrap namespace hierachy as the given
          PID.

 bstree [-j]
          This prints a hierarchical view of the entire Mach bootstrap tree. If [-j] is specified, each
          service name will be followed by the name of the job which registered it.  Requires root priv-
          ileges.

প্রস্তাবিত পন্থাটি হ'ল একটি লঞ্চযুক্ত কাজের টিকিট লিখুন এবং ম্যাকটি পুনরায় চালু করুন - বা ব্যবহারকারীকে লগ-আউট করতে এবং আবার ফিরে আসতে বলুন।

সমস্যার কারণ

অ্যাপ্লিকেশন থেকে সমস্যাগুলি ভুল WindowServerপ্রক্রিয়াটির সাথে সংযুক্ত হচ্ছে m প্রতিটি ব্যবহারকারীর সেশনের আলাদা উইন্ডো সার্ভার থাকে; এই প্রক্রিয়াটি ইউজার ইন্টারফেস পরিচালনা করে। আপনার আগের পদ্ধতিগুলি সঠিক ব্যবহারকারীর সাথে প্রক্রিয়াটির মালিকানা স্থাপন করে তবে আপনার নিজস্ব উইন্ডো সার্ভার প্রক্রিয়াটির সাথে সংযুক্ত।

অ্যাপলের ডেমোনস এবং এজেন্টগুলির প্রযুক্তিগত নোটে এই সমস্যার উল্লেখ রয়েছে ।

অভিজ্ঞতা

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


আপনি কি এখানে একটি সহজ স্ক্রিপ্ট প্রদান করতে পারেন, যেমন টিজে-র উত্তরে সেখানে, তবে একটি কাজ করে? নাকি এ জাতীয় জিনিসের জন্য এটি খুব জটিল?
ক্রেগক্স

সংক্ষিপ্ত স্ক্রিপ্টের জন্য সঠিক সমাধানটি খুব জটিল। আদর্শভাবে, লক্ষ্য ব্যবহারকারীর সেশনে পৃথক ট্রাম্পোলিন জাতীয় প্রক্রিয়া প্রয়োজন। পাওয়ার ম্যানেজারের জন্য আমাদের এটাই করতে হয়েছিল: dssw.co.uk/powermanager আপনি কী অর্জনের আশা করছেন?
গ্রাহাম মিলন

শিরোনামে ঠিক কী বলে তা অর্জনের প্রত্যাশা: অন্য ব্যবহারকারীর সেশনে একটি গুই অ্যাপ্লিকেশন চালু করুন । "বোনাস পয়েন্টস" যদি অন্য ব্যবহারকারীর লগ ইন করার প্রয়োজন না হয় বা এটি প্রোগ্রামিকভাবে লগ ইন করতে পারে। নির্দিষ্টভাবে, আমি একাধিক গুগল ড্রাইভ চাই। যদি আমি কেবল ম্যানুয়ালি লগইন করি এবং এটি সিস্টেমের পছন্দগুলিতে ব্যবহারকারীর লগইন আইটেমের অধীনে হয় তবে এটি কাজ করে । একটি ট্রাম্পোলিন প্রক্রিয়া বোনাস পয়েন্ট আনতে পারে না, তবে যদি এটিই একমাত্র উপায় হয় তবে অ্যাপল ইঞ্জিনিয়াররা এর বিপরীতে সুপারিশটি কী? আমি ভেবেছিলাম এ জাতীয় সহজ হ্যাক স্ক্রিপ্টগুলি করার জন্য এটি অবিকল হবে! : পি
ক্রেগক্স

@ কাওস দয়া করে এটি একটি নতুন প্রশ্ন হিসাবে জিজ্ঞাসা করুন এবং কীভাবে এটি অর্জন করা যেতে পারে তার চেয়ে একাধিক গুগল ড্রাইভগুলি চাওয়ার লক্ষ্যে ফোকাস করুন। ফোকাসের পরিবর্তনটি প্রশ্নটিকে সদৃশ হিসাবে চিহ্নিত না করতে সহায়তা করবে।
গ্রাহাম মিলন

যথেষ্ট ভাল এবং সম্পন্ন
ক্রিগক্স

7

সিস্টেমের ইন্টিগ্রেশন প্রোটেকশন (এসআইপি) বন্দরগুলি বন্ধ করার কারণে এল ক্যাপিটনে (10.11) উপরের কোনও বিসেক্সেকের উত্তর নেই। "প্রবর্তক asuser" কাজ করে তবে মূল হিসাবে চালানো দরকার। নীচের কমান্ডটি এল ক্যাপিটেনে কাজ করে (এবং অতি সাম্প্রতিক ওএস-এস):

sudo launchctl asuser 501 open /Applications/Calculator.app

মনে রাখবেন যে 501 আমার অন্যান্য ব্যবহারকারীর জন্য ব্যবহারকারী for


এটি আমার ফলাফল: bruno.medeiros@brunojcm-macbook:~ $ sudo launchctl asuser 501 open /Applications/Firefox.appএবং পেয়েছেLSOpenURLsWithRole() failed with error -600 for the file /Applications/Firefox.app
ব্রুনোজেসিএম

@ ব্রুনোজেসিএম আপনি কি নিশ্চিত যে ৫০১ ব্যবহারকারীর সাথে এটি খুলতে চান তার ব্যবহারকারী আইডি কোড? কমান্ডটি এমন কিছু হলে এটি কিছুটা পরিষ্কার sudo launchctl asuser $(id -u <user_id_name>) <app>। এটি বলেছিল, আমি posix_spawn(): 13: Permission deniedএকই ইউজার আইডি দিয়ে চালিত হয়েছি যা আমি লগ ইন করেছি (এবং সেশনটির মালিক)sudo launchctl asuser $(id -u mtylutki) /Applications/Calculator.app
মার্কস

2

অবশেষে ১০.১০ একটি সঠিক "লঞ্চক্টেল বিসেক্সেক" বাস্তবায়ন সরবরাহ করতে পারে যা আপনি ব্যবহার করতে পারেন:

sudo /bin/launchctl bsexec PID chroot -u UID -g GID / open /Applications/TextWrangler.app

মানুষ বলে

এটি প্রদত্ত কমান্ডটি কার্যকর পিআইডির সাথে যতটা সম্ভব বাস্তবায়ন প্রসঙ্গে কার্যকর করে।

সুতরাং পিআইডি পরম হিসাবে আপনি উপযুক্ত লগইনউইন্ডো প্রক্রিয়াটির পিড ব্যবহার করতে পারেন । ইউআইডি হ'ল ব্যবহারকারীর আইডি হ'ল লগইন উইন্ডো এবং জিআইডি এটি প্রাথমিক গোষ্ঠী।

এটি যে কোনও কমান্ডের জন্য অবশ্যই কাজ করে এবং অবশ্যই লঞ্চকৃত চাকরির জন্য (ফে লঞ্চে) শেষের মতো পছন্দ করে:

/bin/launchctl bsexec 104 chroot -u 501 -g 20 / /bin/launchctl load -S Aqua /Library/LaunchAgents/com.youragent.plist 2>&1

এটি অন্যের পক্ষে সত্য কিনা তা নিশ্চিত নই, তবে আমি task_for_pid(): 0x5এইটির জন্য এখন একটি ত্রুটি পেয়েছি, যেখানে আমি পিআইডি যাচাই করেছি।
মার্কাস

1

আপনি সঠিক অনুমতিগুলির জন্য হোস্ট হিসাবে ফাইন্ডার ব্যবহার করতে পারেন osascript -e "tell application \"Finder\" to open (\"${app}\" as POSIX file as alias)"। এইভাবে এটি জিইউআই প্রসঙ্গটি ফাইন্ডার প্রবর্তন করে যা কিছুতেই চালু হবে।


0

এটি ssh এর মাধ্যমে কাজ করে:

#!/bin/bash

PID=$(ps auxwww | egrep "^bar" |\
fgrep /System/Library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow |\
awk '{print $2}')

sudo launchctl bsexec "$PID" open -a TextEdit

তবে এটি যদি টার্মিনাল.অ্যাপের মাধ্যমে চেষ্টা করে তবে এটি বর্তমান ব্যবহারকারীর জিইউআইতে টেক্সটএডিট খুলবে।

আপনি যদি নিশ্চিত না হন যে sshএটি সক্ষম হয়েছে তবে সম্ভবত আপনি সাময়িকভাবে এটি সক্ষম করতে পারেন

sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist

এবং প্রয়োজনে এটি আবার নিষ্ক্রিয় করবেন?

নাহলে আমি স্ট্যাম্পড আছি।

10.9 এ পরীক্ষা করা হয়েছে।


এটি আপনি যেমনটি বলেছেন তেমন অ্যাপ্লিকেশনটি খোলায়, তবে এটি বর্তমান ব্যবহারকারী সেশনে এটি খুলবে, এবং অন্য ব্যবহারকারীর সেশনে যেমন বলা হয়েছিল তেমন নয়।
ক্রেগক্স

-1

সহজ

sudo su name_of_user

তারপরে কমান্ডগুলি সাধারণভাবে কার্যকর করুন।


কমান্ডগুলি দ্বারা চালিত হবে bar, তবে এখনও fooগ্রাফিকাল সেশনে চলবে ।
জন এন

দুঃখিত, হ্যাঁ আমি প্রশ্নটি সম্পর্কে বিভ্রান্ত, ফু গ্রাফিকাল সেশনে কার্যকর করা হয় না।
পান্ডবি সফটওয়্যার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.