রুট হিসাবে 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.