রুট হিসাবে xrandr প্রদর্শন প্রদর্শন করতে পারে না


9

আমি যখন আমার থিঙ্কপ্যাডকে ডক বা আন-ডক করি তখন নীচের নিয়মটি আমার স্ক্রিপ্টকে কল করে:

# /lib/udev/rules.d/81-thinkpad-dock.rules
KERNEL=="dock.0", ATTR{docked}=="0", RUN+="/usr/bin/think-dock-hook off"
KERNEL=="dock.0", ATTR{docked}=="1", RUN+="/usr/bin/think-dock-hook on"

এটিকেই বলা হবে স্ক্রিপ্ট:

# /usr/bin/think-dock-hook
# Find the user who is currently logged in on the primary screen.
user="$(who -u | grep -F '(:0)' | head -n 1 | awk '{print $1}')"
su -c "bash -x /usr/bin/think-dock $setto" "$user" >> /root/think-dock.log 2>&1 &

এবং তখন যে স্ক্রিপ্ট বলা হয় এটি দিয়ে কিছু করে xrandr।

জিনিসটি হ'ল আমি think-dock onআমার ব্যবহারকারী হিসাবে চালাতে পারি ( mu) এবং এটি কাজ করে। আমি sudo -iচালাতে পারি think-dock-hook onএবং এটিও কাজ করে। তবে আমি যখন udevএটি চালাতে দেই, এটি থেকে নিম্নলিখিত ত্রুটিটি পাওয়া যায় xrandr:

# output of bash -x think-dock on
+ xrandr --output LVDS1 --auto
Can't open display

এখন আমি যদি xrandrআমার sudo -iশেল থেকে কল করি তবে আমি পেলাম:

No protocol specified
No protocol specified
Can't open display :0

তবে, আমি যদি su -c xrandr muআমার sudo -iশেল থেকে করি তবে আমি প্রত্যাশিত আউটপুট পাব get

সুতরাং আমি সত্যিই বুঝতে পারি না, স্ক্রিপ্টটি udevব্যর্থ হয়েছিল।


1
grep -F '(:0)'হওয়া উচিত grep -F '(:0.0)'; একটি স্টিকিং চেষ্টা DISPLAY=:0.0সামনে/usr/bin/think-dock
— পর

যে DISPLAYভাল মনে হয়। আমার whoপ্রদর্শন (:0)যদিও। সুতরাং আমি মনে করি না যে গ্রেপ সেভাবে ভাল হবে।
— মার্টিন উয়েডিং

ঠিক আছে, DISPLAYসামনে রেখে bash, এখন মনে হচ্ছে এটি কাজ করছে। ধন্যবাদ!
— মার্টিন উয়েডিং

গ্রেট! আমার whoছিল 0.0, তবে যাই হোক। যেহেতু এটি কাজ করেছে, আমি DISPLAYউত্তর হিসাবে অংশটি যুক্ত করব ; দয়া করে এটি গ্রহণ করুন। ধন্যবাদ!
— পর

উত্তর:


7
  • এক্সরেন্ডারকে জানতে হবে যে আপনি সাধারণত কোন DISPLAYপরিবেশের পরিবর্তনশীলের মাধ্যমে প্রদর্শন করছেন
  • root(যা উদেব হিসাবে চালিত হয়) এর কোনও ডিফল্ট DISPLAYসেট নেই; এমনকি সে যদি করেও, su -cডিফল্টরূপে পরিবেশ সংরক্ষণ করে না
  • সুতরাং এটি স্পষ্টভাবে বাশকে প্রেরণ করুন এবং এটি আপনার সমস্যার সমাধান করা উচিত, যেমন:

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