2017-06-23 16 views
5

Tôi đang sử dụng tập lệnh php trên máy chủ apache/ubuntu để gọi một tập lệnh bash kích hoạt ứng dụng lấy tập lệnh python làm đối số (IDAPro).Lỗi quyền truy cập PHP/Ubuntu - QxcbConnection: Không thể kết nối để hiển thị bị hủy bỏ

PHP Mã

chdir('/var/www/dashboard/team/static/sql'); 
$output = exec('sudo -u rohan ./start.sh'); 

Bây giờ, các mã trên hoạt động tốt nếu tôi chạy file PHP từ nhà ga - nhưng chỉ khi tôi chạy nó như là người dùng root. Không cần phải nói, nếu tôi thực thi trực tiếp tệp bash nó cũng chạy.

Nhưng khi tôi chạy file PHP trên trình duyệt, nó không hoạt động và tôi nhận được lỗi sau trong nhật ký lỗi apache:

QXcbConnection: Could not connect to display 
Aborted 

Tôi hiểu rằng Apache/php chạy như 'www- dữ liệu 'người dùng (sử dụng' whoami 'để xác minh), và đó là lý do tại sao tôi có sudo trong exec của tôi. Tôi đã tinh chỉnh và sửa đổi quyền cho cả hai người dùng không có kết quả. Khi tôi chạy tệp php từ thiết bị đầu cuối là người dùng 'www-data', nó không có lỗi nhưng không làm bất cứ điều gì ngoại trừ hiển thị các thẻ echo ngẫu nhiên tôi ở đầu và cuối tập lệnh để gỡ lỗi nó.

Tôi là người mới sử dụng Linux, vì vậy mọi trợ giúp đều được đánh giá cao.

Trả lời

4

Được rồi, cuối cùng tôi đã giải quyết được.

Sự cố không có quyền, mà là với các biến môi trường.

tôi phải bao gồm các dòng sau trong script bash tôi

export DISPLAY=':0.0' 

Lưu ý rằng thiết lập các biến trong thiết bị đầu cuối và chạy kịch bản không hoạt động. Dòng cần nằm bên trong tập lệnh. Tôi cho rằng điều này là do biến DISPLAY không được đặt nếu bạn chạy tập lệnh dưới dạng bất kỳ người dùng nào ngoài root, đó là những gì xảy ra trong trường hợp của Apache/PHP, nơi tập lệnh được thực thi với tư cách người dùng 'www-data' .

2

có lẽ bạn có thể sử dụng giống như sau ở phía trên cùng của kịch bản của bạn:

if [ "$(id -un)" != "rohan" ]; then 
    exec sudo -u rohan $0 "[email protected]" 
fi 

export XAUTHORITY=/home/rohan/.Xauthority 
export DISPLAY=:0 
+0

Cảm ơn cho 'XAUTHORITY'! – kyb

Các vấn đề liên quan