Tôi đang chạy Apache trên máy chủ cục bộ của mình. Từ một kịch bản PHP chạy như www-người dùng tôi muốn kiểm soát phát lại Rhythmbox trên máy tính của tôi. Cho đến nay tôi có một câu lệnh đơn giản trong kịch bản PHP của tôi:Chạy ứng dụng dòng lệnh từ PHP với tư cách người dùng cụ thể
exec('rhythmbox-client --pause');
này hoạt động tuyệt vời khi tôi chạy nó từ dòng lệnh như tôi, nhưng nếu nó chạy như www-người sử dụng tôi đoán rhythmbox-client
không biết/không thể truy cập vào bản Rhythmbox của tôi.
Có cách nào dễ dàng để tập lệnh PHP chạy như người dùng của tôi thay vì người dùng www hay không hoặc để cho biết rhythmbox-client
trường hợp nào cần kiểm soát?
Ứng dụng tổng thể là khi điện thoại của tôi tắt, nó gọi tập lệnh PHP của tôi tạm dừng nhạc và tiếp tục phát lại khi điện thoại đang bật. Tôi yêu điện thoại VoIP!
Giải pháp: Nhờ Carpetsmoker và Tarek tôi đã sử dụng sudo
là câu trả lời nhưng có một vài vấn đề. Để khắc phục chúng, tôi đã làm như sau:
Tạo tập lệnh bash để gọi rhythmbox-client
. Kịch bản lệnh bash này được thực hiện bằng cách sử dụng sudo
trong PHP như được mô tả trong câu trả lời dưới đây. Thật không may rhythmbox-client
không biết những gì môi trường để kiểm soát, vì vậy các tập lệnh bash trông như thế này:
#! /bin/bash
DBUS_ADDRESS=`grep -z DBUS_SESSION_BUS_ADDRESS /proc/*/environ 2> /dev/null| sed 's/DBUS/\nDBUS/g' | tail -n 1`
if [ "x$DBUS_ADDRESS" != "x" ]; then
export $DBUS_ADDRESS
/usr/bin/rhythmbox-client --pause
fi
Bây giờ kịch bản bash có thể được thực hiện bởi PHP và wwwuser, và điện thoại của tôi có thể tạm dừng/chơi nhạc của tôi!
điều gì sẽ cố gắng chạy nhịp điệu-khách không phải là gốc? – genesis
Bạn có dự định chỉ chạy máy chủ của mình cục bộ không? (aka không bao giờ đặt nó trực tuyến) – afuzzyllama
@afuzzyllama Có nó chỉ là tại địa phương – Tak