Câu hỏi Kịch bản Bash sử dụng `sudo` chạy đúng từ cli nhưng không phải khi được nhấp để chạy


Tôi đang cố gắng để có được một kịch bản bash đơn giản để chạy khi tôi nhấp vào nó. Nó chạy hoàn hảo từ cli nhưng bắt đầu motion với sudo không khởi động được. Tôi đã thiết lập kịch bản với sudoers đã cho nopasswd, nó bắt đầu lên một cách chính xác và không yêu cầu mật khẩu khi chạy từ cli. Nó cũng đóng tất cả mọi thứ một cách chính xác khi chạy từ cli, nhưng nó gần giống như sudo các dòng bị bỏ qua khi tôi chỉ cần nhấp đúp vào tệp và yêu cầu nó chạy.

Đây là kịch bản của tôi:

#!/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


gốc


thử thay thế 'sudo' bằng 'gksu'. - Sudheer


Các câu trả lời:


Trong Nautilus bạn có hai tùy chọn để chạy một kịch bản khi bạn kích đúp vào nó:

Run a script from Nautilus

1. Chạy trong Terminal

  • Sử dụng tùy chọn này, tập lệnh của bạn sẽ chạy đúng (như bạn đã nói).

2. Chạy

  • Sử dụng tùy chọn này bạn phải sử dụng pkexec (hoặc là gksu nếu bạn đã cài đặt nó) thay vì sudo. Đó là bởi vì bạn không thể chạy các lệnh đồ họa sử dụng sudo mà không cần sử dụng trình mô phỏng thiết bị đầu cuối X, ngay cả khi bạn đặt sudo không yêu cầu mật khẩu.

  • Vì vậy, trong trường hợp này, tập lệnh của bạn sẽ giống như sau:

    #!/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



chuyển sang pkexec đã làm việc nhưng vẫn phải đặt mật khẩu mỗi lần. Không khủng khiếp nhưng tôi đã hy vọng tạo một trình khởi chạy mà tôi chỉ cần nhấp vào để bật và tắt chuyển động. Có cách nào để làm cho nó vì vậy tôi không phải đặt mật khẩu của tôi mỗi lần? - user311472
@ user311472 Bạn không cần để đặt mật khẩu mỗi lần nếu bạn làm theo câu trả lời sau: Làm thế nào để cấu hình pkexec để không yêu cầu mật khẩu? :) - Radu Rădeanu
hoạt động hoàn hảo! cảm ơn nhiều. - user311472