একটি ভিন্ন tty উপর একটি প্রক্রিয়া শুরু করুন


31

প্রায় এক ঘন্টা এটি গুগল করার পরেও আমি বিশ্বাস করতে পারি না যে আসলেই কেউ আগে এই প্রশ্নটি করেনি ...

সুতরাং আমি স্ক্রিপ্ট পেয়েছি TTY1 এ চলমান। আমি কীভাবে স্ক্রিপ্টটি টিটিওয়াই 2 তে কিছু স্বেচ্ছাসেবী প্রোগ্রাম চালু করব?

  • আমি পেয়েছি tty, যা আপনাকে বর্তমানে কোন টিটিওয়াইতে রয়েছেন তা বলে।
  • আমি খুঁজে পেয়েছি writevt, যা বিভিন্ন টিটিওয়াইয়ের উপরে একক পাঠ্য লেখায়।
  • আমি পেয়েছি chvt, টিটিওয়াই বর্তমানে প্রদর্শিত যা পরিবর্তন করে।

আমি টিটিওয়াই 2 প্রদর্শন করতে চাই না । আমি কেবল চাই মূল স্ক্রিপ্টটি সাধারণত চালানো চালিয়ে যেতে চাই, তবে আমি নিজে টিটিওয়াই 2 তে স্যুইচ করলে আমি দ্বিতীয় প্রোগ্রামের সাথে ইন্টারঅ্যাক্ট করতে পারি।


টিটিওয়াই 1 থেকে, আপনি কি চেষ্টা করেছেন [command] > /dev/tty2(আপনাকে ইতিমধ্যে টিটি 2 তে লগ-ইন করতে হবে)?
পান্ড্য

1
এটি একটি এক্সওয়াইপ্রব্লেম হতে পারে ... আপনি কী অর্জন করার চেষ্টা করছেন? সামগ্রিক লক্ষ্য কি?
অলিভিয়ার ডুলাক

উত্তর:


32
setsid sh -c 'exec command <> /dev/tty2 >&0 2>&1'

যতক্ষণ না অন্য কোনও টিটিওয়াই অন্য টিটিওয়াই ব্যবহার করছে না ( /dev/tty2এই উদাহরণে) এটি কাজ করা উচিত। এর মধ্যে এমন একটি gettyপ্রক্রিয়া অন্তর্ভুক্ত রয়েছে যা কারও জন্য লগইন করার অপেক্ষায় থাকতে পারে; একাধিক প্রক্রিয়া একটি Tty থেকে তার ইনপুট পড়া থাকার করবে অপ্রত্যাশিত ফলাফল হতে।

setsid একটি নতুন অধিবেশন কমান্ড শুরু করার যত্ন নেয়।

দ্রষ্টব্য যে সেটিংসটি সঠিকভাবে commandসেট করার বিষয়ে যত্ন নিতে sttyহবে, উদাহরণস্বরূপ "রান্না করা মোড" চালু করুন এবং onlcrযাতে একটি নতুন লাইন আউটপুট আউট করার সাথে সাথে ক্যারেজের রিটার্ন যোগ হবে ইত্যাদি etc.


2
এটি সঠিক নয়। আপনার সাথে নিয়ন্ত্রণকারী টার্মিনাল তালগোল /dev/stdin, /dev/stdoutএবং /dev/stderrpsসহজেই দেখায় যে commandআপনার ক্ষেত্রে কন্ট্রোলিং টার্মিনাল মোটেই নেই।
হউক লেগেইং

1
@ হককিজিং, একটি অধিবেশন লিডার টার্মিনালটি খুললেই তা নিয়ন্ত্রণ করে। সমস্যাটি ছিল সেশন লিডার দ্বারা টার্মিনাল ডিভাইসটি খোলা হয়নি। এখনই ঠিক করা উচিত।
স্টাফেন চেজেলাস

@ স্টাফেনচাজেলাস আমি পরীক্ষা করেছি sleep 1000এবং এটি এখনও এখানে কাজ করে না। আমি একটি ছদ্ম tty ব্যবহার করেছি, যদিও (কোন পার্থক্য করা উচিত নয়, আমার ধারণা)।
হউক লেগেইং

@ হক্কলিজিং আপনি এটি কীভাবে করেছেন? সেই টার্মিনালটিতে ইতিমধ্যে কোনও নিয়ন্ত্রণকারী অধিবেশন ছিল না ( যতক্ষণ না অন্য কিছু টিটিটিওয়াই অংশ ব্যবহার করছে না )
স্টাফেন চেজেলাস

1
@ স্টাফেনচাজেলাস আমি setsid sh -c 'exec sleep 1000 <>/dev/pts/4 >&0 2>&1'একটি টার্মিনাল এমুলেটর উইন্ডোতে দৌড়ালাম । /dev/pts/4অন্য টার্মিনাল এমুলেটর উইন্ডো (একই ব্যবহারকারী, bashচলমান)।
হউক লেগেইং

6

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

আইএমও এর আরও সহজ সমাধানটি হ'ল tmuxদ্বিতীয় স্ক্রিনে লগ ইন করার পরে একটি সেশন শুরু করা এবং তারপরে ব্যবহার করুন:

tmux send yourcommand ENTER

আপনি tmuxদ্বিতীয় টার্মিনাল স্যুইচ করার পরে প্রদর্শিত হবে যা অধিবেশন প্রোগ্রাম শুরু করতে ।


2

আমি সবেমাত্র একটি আবিষ্কার করেছি:

আমি কীভাবে 2 টি টি টি থেকে লঞ্চে অ্যাপ্লিকেশন চালু করতে পারি?

মন্তব্যের মধ্যে একটি বলে কিছু উল্লেখ করা হয়েছে openvt। এই কমান্ডটি হ'ল আমি ঠিক পরে যা করছি!

http://linux.about.com/library/cmd/blcmdl1_openvt.htm

যদি না কেউ বিভিন্ন জানে, আমি মনে করি এই সম্ভবত "সঠিক" এই করতে হয়।

(আমি এটি চেষ্টা করে দেখেছি, এবং এটি ঠিকঠাক কাজ করেছে বলে মনে হচ্ছে - gettyএটি চলমান থাকলেও এটি পরবর্তী অব্যবহৃত টার্মিনালটি তুলেছে I


0

আমি অনুসরণ কমান্ড দিয়ে ভিটি 5 তে একটি নতুন গ্রাফিকাল সেশন শুরু করি

xinit "/usr/bin/<binary_executable>" -- :1 vt5

উদাহরণ স্বরূপ :

xinit "/usr/bin/playonlinux" -- :1 vt5

আপনি যদি ইতিমধ্যে সক্রিয় গ্রাফিকাল সেশনে কোনও গ্রাফিকাল অ্যাপ্লিকেশন চালু করতে চান তবে আপনি এটি করতে পারেন:

DISPLAY=:0 "/usr/bin/playonlinux"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.