এসএসএইচকে প্রস্থান বন্ধ করতে আটকাতে কীভাবে ডি-বাস এবং এসএসএইচ এক্স-ফরওয়ার্ডিং কনফিগার করবেন?


19

আমি এক্স 11 ফরোয়ার্ডিং এবং এসএসএইচ এর মাধ্যমে বিভিন্ন জিনোম অ্যাপ্লিকেশন চালানোর চেষ্টা করছি। কিছু অ্যাপ্লিকেশনগুলির ফলে প্রথমে 'ডিবিস-লঞ্চ' অ্যাপ্লিকেশন তৈরি হবে। সমস্যাটি হ'ল এক্স অ্যাপ্লিকেশনটি বের হওয়ার পরে dbus- আরম্ভ বন্ধ হয় না এবং তাই এসএসএইচ অধিবেশনটি সঠিকভাবে বন্ধ করার আগে অবশ্যই তাকে হত্যা করতে হবে।

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

এখানে একটি উদাহরণ। আমি এক্স 11 ফরওয়ার্ডিং সক্ষম করেছি, সব ঠিকঠাক বলে মনে হচ্ছে।

[me@host ~]$ gnome-calculator &
[1] 4803

(এখানে gcalctool প্রোগ্রাম চালু হয় এবং আমার সরানো এক্স সার্ভারে প্রদর্শিত হবে (এক্সিং))

[me@host ~]$ ps
  PID TTY          TIME CMD
 4706 pts/0    00:00:00 bash
 4803 pts/0    00:00:00 gnome-calculator
 4807 pts/0    00:00:00 dbus-launch
 4870 pts/0    00:00:00 ps

(এখন, রিমোট সেশনে gcalctool অ্যাপ্লিকেশনটি বন্ধ করার পরে)

[me@host ~]$ ps
  PID TTY          TIME CMD
 4706 pts/0    00:00:00 bash
 4807 pts/0    00:00:00 dbus-launch
 4898 pts/0    00:00:00 ps

নোট করুন যে dbus- আরম্ভ এখনও সক্রিয় আছে। এবং সবচেয়ে খারাপ দিক, এটি এসএসএইচ সংযোগটি মারা না যাওয়া পর্যন্ত সঠিকভাবে বন্ধ হতে বাধা দেয়।

মনে রাখবেন যে সিস্টেম ওয়াইড বার্তা ডেমন চলছে, এখানে দেখা যাবে:

[me@host ~]$ ps ax
 4696 ?     Ssl   0:00 dbus-daemon --system

আমি এখানে কি মিস করছি? এই আচরণ আমি এর আগে কখনও দেখিনি। সম্ভবতঃ, আমি কেবল কখনও এমন অ্যাপ্লিকেশন দেখেছি যেগুলি বাসে ডেমনকে বাধা ছাড়াই সংযোগ করতে পারে? আমি উত্তরের জন্য / etc / dbus-1 এ সন্ধান করেছি, তবে কী সন্ধান করবে তা জানি না।

সাহায্যের জন্য আগাম ধন্যবাদ।

[Edit]

ঠিক আছে, আমি বুঝতে পারছি যে আমি একটি সাধারণ সমস্যা অনুভব করছি। দেখে মনে হচ্ছে এটি মোটামুটি সাধারণ আচরণ, তবে ভাল সমাধান ছাড়াই। আমি এসএসএইচ হ্যাংয়ের অভিজ্ঞতা নিচ্ছি কারণ ডাবাস-লঞ্চটি টিটিটিতে এখনও সক্রিয়। তবে ডিবাস-লঞ্চটি চুপচাপ হয়ে উঠার জন্য সম্ভবত কোনও ভাল উপায় নেই।

/Etc/X11/xinit/xinitrc.d/00-start-message-bus.sh এর দিকে তাকালে "সাধারণ" এক্স সেশনের সাথে কী ঘটবে বলে কিছুটা ক্লু দেয়। কেবল কোনও দূরবর্তী এক্স সার্ভারে একটি এক্স অ্যাপ্লিকেশন চাওয়ার সময় এটি অবশ্যই কাজ করে না।

অস্থায়ী কর্মক্ষেত্র হিসাবে, আমি এটি আমার .বাশ_লগআউটে যুক্ত করেছি:

# ~/.bash_logout
pkill -u $USER -t `tty | cut -d '/' -f 3,4` dbus-launch

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

উত্তর:


15

প্রতি ডিবিস-লঞ্চ (1):

যদি ডি-বাস ব্যবহারের চেষ্টা করে এমন কোনও প্রক্রিয়ার জন্য যদি ডিবিএস_সেসিওন_বিউএসএডিএড সেট না করা থাকে, তবে ডিফল্টরূপে প্রক্রিয়াটি একটি নতুন সেশন বাস শুরু করতে বা এক্স ডিসপ্লেতে বিদ্যমান বাসের ঠিকানা খুঁজে পাওয়ার জন্য --autolaunch বিকল্পের সাহায্যে dbus- আরম্ভের আহ্বান জানাতে চেষ্টা করবে অথবা file / .dbus / সেশন-বাস / এ একটি ফাইলের মধ্যে

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

অটোলাঞ্চের জন্য দুটি সাধারণ কারণ রয়েছে। একটি দূরবর্তী মেশিনে ssh হয়।

সুতরাং মনে হয় কৌশলটি ডিবাস-ডেমনকে পূর্বনির্ধারিতভাবে শুরু করা, এমনভাবে যাতে প্রোগ্রামগুলি এটি সন্ধান করতে পারে। আমি ব্যবহার করি:

[me@host ~]$ dbus-launch --exit-with-session gnome-terminal

যা, জিনোম-টার্মিনালকে বাদ দিয়ে, ডিবিস-ডেমন শুরু করে এবং জিনোম-টার্মিনালের মধ্যে $ DBUS_SESSION_BUS_ADDRESS সেট করে ।

জিনোম-টার্মিনাল থেকে চালিত কোনও এক্স প্রোগ্রামগুলি সুন্দরভাবে আচরণ করে এবং জিনোম-টার্মিনালটি প্রস্থান করার সাথে সাথে ডিবিস-লঞ্চটি নিজের পরে পরিষ্কার হয়ে যায়।


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

2

আমি ভাবছি যদি অজানা বা অনাবৃত ডিবিস সেশনের কারণে সমস্যা না আসে।

প্রকৃতপক্ষে যখন কোনও এসএসএইচ অধিবেশন খোলা থাকে, তখন এটি ডিবিএস সেশন শুরু করে না। কিছু প্রোগ্রাম এটি চালু করতে পারে তবে সেশনটি এটি সম্পর্কে জানতে পারে না (তাই এটি বন্ধ করতে পারে না)।

Dbus অধিবেশন সম্পর্কে না জানার অর্থ হ'ল প্রোগ্রামগুলি thzat dbus ব্যবহার করে তবে এটি চালু না করে নিজেই সমস্যা হবে।

dbus বিভাগগুলি প্রতি মেশিনে এবং প্রতি এক্স 11 ডিসপ্লেতে হয়। তাদের তথ্য $ হোম / .ডিবিস / সেশন-বাস / এ সঞ্চিত আছে - তবে, সেখানে উল্লিখিত প্রক্রিয়াটি বন্ধ হয়ে যেতে পারে, সুতরাং ডিবিস চালু করার প্রয়োজন আছে কিনা তা নির্ধারণ করার জন্য একটি অতিরিক্ত চেক প্রয়োজন। তারপরে, সেখানে ভেরিয়েবলগুলি সেশনে রফতানি করতে হবে।

তাহলে এটি একটি কবজির মতো কাজ করে :)

আমি আমার .bash_ প্রোফাইলে ফাইলটিতে নিম্নলিখিতটি রেখেছি:

# set dbus for remote SSH connections
if [ -n "$SSH_CLIENT" -a -n "$DISPLAY" ]; then
    machine_id=$(LANGUAGE=C hostnamectl|grep 'Machine ID:'| sed 's/^.*: //')
    x_display=$(echo $DISPLAY|sed 's/^.*:\([0-9]\+\)\(\.[0-9]\+\)*$/\1/')
    dbus_session_file="$HOME/.dbus/session-bus/${machine_id}-${x_display}"
    if [ -r "$dbus_session_file" ]; then
            export $(grep '^DBUS.*=' "$dbus_session_file")
            # check if PID still running, if not launch dbus
            ps $DBUS_SESSION_BUS_PID | tail -1 | grep dbus-daemon >& /dev/null
            [ "$?" != "0" ] && export $(dbus-launch) >& /dev/null
    else
            export $(dbus-launch) >& /dev/null
    fi
fi

দ্রষ্টব্য: হোস্টনামেক্টলটি সিস্টেমডের একটি অংশ এবং মেশিন-আইডিটি পুনরুদ্ধার করতে দেয় ডিবিস-লঞ্চটি আমাদের পছন্দসই পরিবর্তনগুলি প্রদর্শন করে; ব্যবহার করে export $(dbus-launch)আমরা dbus- আরম্ভের আউটপুট পুনরুদ্ধার করি এবং ভেরিয়েবলগুলি রফতানি করি

যদি আপনি এটি অ-ইন্টারেক্টিভ সিসিওতে সম্পন্ন করতে চান (উদাহরণস্বরূপ ssh থেকে কোনও কমান্ড চালানোর সময়) এটির পরিবর্তে .bashrc এ দেওয়ার চেষ্টা করুন (তবে সাবধান হন যে বাশার্ক প্রতিটি খোলা শেলে কার্যকর করা হবে)


1

দূরবর্তী এক্স কমান্ড চালানোর চেষ্টা করার সময় আমার একই সমস্যা হয়েছিল এবং এক্স সরঞ্জামটি বেরিয়ে যাওয়ার পরে সেশনটি প্রস্থান করে।

তাই আমি দৌড়াতে চেয়েছিলাম

ssh -X user@remotehost "firefox -no-remote"

তবে ব্যবহার করতে হয়েছিল:

ssh -X user@remotehost 'export \`dbus-launch\`; dbus-launch firefox -no-remote; kill -TERM $DBUS_SESSION_BUS_PID'

ফায়ারফক্স বন্ধ করার পরে এটি ssh সেশনটি বন্ধ করে দেবে।

আপডেট :

এটি সার্ভারে চলমান dbus-daemon প্রক্রিয়াগুলির একটি বোঝা ছেড়ে দেবে বলে মনে হয়, সুতরাং এটি সর্বোত্তম নয়, উভয় অ্যাকাউন্টে - এক্সট-উইন্ড-সেশনের সাহায্য করে না, কারণ এটি আসল আচরণকে বদলে দেয়

আপডেট 2 : যখন আমি একক উদ্ধৃতি ব্যবহার করি, তখন এটি কার্যকর হয় (@ লাবোর পরামর্শ অনুসারে) এবং https://blog.dhampir.no/content/how- এর থেকে হোলার জোকলkill -TERM $DBUS_SESSION_BUS_PID প্রস্তাবিত লেফটোভার ডিবিস-ডেমন প্রক্রিয়াগুলিকে হত্যা করার জন্য যুক্ত করে টু-রোধ-এসএস-এক্স-থেকে-ঝুলন্ত-অন-প্রস্থান-যখন-ডাবাস-ব্যবহৃত হয় )


আপনাকে শেষ কমান্ডে একক উদ্ধৃতি ব্যবহার করতে হবে (অন্যথায় স্থানীয়ভাবেdbus-launch চালানো হয় ) তবে এটি কার্যকর হয়। ধন্যবাদ!
l0b0
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.