سؤال يعمل البرنامج النصي Bash باستخدام `sudo` بشكل صحيح من cli ولكن ليس عند النقر للتشغيل


أحاول الحصول على برنامج نصي بسيط للباش لتشغيله عندما أنقر عليه. انها تعمل تماما من cli ولكن تبدأ motion مع sudo فشل في البدء. لدي هذا الإعداد النصي مع sudoers بالفعل من أجل nopasswd ، فإنه يبدأ بشكل صحيح ولا يطلب كلمة المرور عند تشغيل من cli. كما أنه يغلق كل شيء بشكل صحيح عندما ركض من cli ، ولكن تقريبا مثل sudo يتم تخطي الخطوط عند النقر مرتين على الملف وإخباره بالتشغيل.

هنا نصي:

#!/bin/bash

check_process() {
  [ "$1" = "" ]  && return 0
  [ `pgrep -n $1` ] && return 1 || return 0
}

check_process "motion"
if [ $? -eq 0 ]
then
  sudo /etc/init.d/motion start
  firefox http://localhost:8081/ > /dev/null &
else
  sudo /etc/init.d/motion stop
  killall firefox > /dev/null &
fi

2
2017-08-02 04:51


الأصل


حاول استبدال "sudo" بـ "gksu". - Sudheer


الأجوبة:


في Nautilus لديك خياران لتشغيل برنامج نصي عندما تضغط عليه مرتين:

Run a script from Nautilus

1. تشغيل في المحطة

  • باستخدام هذا الخيار ، سيتم تشغيل البرنامج النصي بشكل صحيح (كما قلت).

2. تشغيل

  • باستخدام هذا الخيار يجب عليك استخدام pkexec (أو gksu إذا كان لديك تثبيته) بدلا من sudo. هذا لأنك لا تستطيع تشغيل الأوامر الرسومية التي تستخدم sudo دون استخدام محاكي طرف X ، حتى إذا قمت بتعيين sudo لا تسأل عن كلمة المرور.

  • لذا ، في هذه الحالة ، يجب أن يبدو النص البرمجي كما يلي:

    #!/bin/bash
    
    check_process() {
      [ "$1" = "" ]  && return 0
      [ `pgrep -n $1` ] && return 1 || return 0
    }
    
    check_process "motion"
    if [ $? -eq 0 ]
    then
      pkexec /etc/init.d/motion start
      firefox http://localhost:8081/ > /dev/null &
    else
      pkexec /etc/init.d/motion stop
      killall firefox > /dev/null &
    fi
    

2
2017-08-02 10:24



التحول إلى pkexec عمل ولكن لا يزال يتعين على وضع كلمة المرور في كل مرة. ليس رهيباً ، لكني كنت أتوقع أن أقوم بتشغيل قاذفة قمت بنقرها لتفعيل الحركة وإيقافها. هل هناك طريقة لجعلها غير مضطر إلى وضع كلمة المرور الخاصة بي في كل مرة؟ - user311472
@ user311472 لا تحتاج لوضع كلمة المرور في كل مرة إذا اتبعت الإجابة التالية: كيفية تكوين pkexec لعدم طلب كلمة المرور؟ :) - Radu Rădeanu
يعمل الكمال! تشكرات. - user311472