Khởi chạy phiên X giả / tối thiểu cho Pulseaudio / dbus


12

Tôi sử dụng Pulseaudio để chia sẻ âm thanh giữa máy tính để bàn và Raspberry Pi.

Tuy nhiên, Pulseaudio cần dbus và dbus cần phiên X. Không có phiên đồ họa, Pulseaudio chỉ có thể chạy ở chế độ hệ thống, chính thức không được khuyến nghị.

Bên cạnh một Raspberry Pi, chi phí của một phiên X là rất cao, vì vậy tôi muốn loại bỏ nó theo cách hiệu quả nhất (ít tốn kém hơn).

Làm cách nào tôi có thể bắt đầu phiên X nhỏ nhất để Pulseaudio khởi động?


Udev chắc chắn không cần X. Tôi không biết về Pulseaudio: thất bại gì khi không có X? Cái này có liên quan đến D-Bus không?
Gilles 'SO- đừng trở nên xấu xa'

Vâng, tôi đã đọc nó nhưng nó có thể chỉ là Pulseaudio. Trong trường hợp không có X Pulseaudio được tung ra ở chế độ toàn hệ thống, điều đó có nghĩa là không có phiên cho mỗi người dùng, điều này rất tệ như trang web chính thức nói: freedesktop.org/wiki/Software/PulseAudio/Documentation/User/
tựa

Xin lỗi tôi đã trộn udev và dbus, chỉnh sửa.
kursus

Câu trả lời:


11

Bạn có thể sử dụng Xvfb , đó là máy chủ X với bộ đệm khung ảo, tức là máy chủ X chỉ hiển thị trong bộ nhớ và không kết nối với bất kỳ phần cứng nào. Bạn không cần phải chạy bất kỳ ứng dụng khách nào bạn không muốn trên máy chủ đó và đặc biệt không có môi trường máy tính để bàn hoặc trình quản lý cửa sổ.

Xvfb :1 -screen 0 1x1x8 &

Sau đây:

DISPLAY=:1 dbus-launch
DISPLAY=:1 pulseaudio --start

Bạn cần đợi một chút sau khi bắt đầu Xvfbhiển thị. Bạn có thể sử dụng xinitđể khởi động máy chủ X và sau đó khởi động máy khách khi sẵn sàng. Đặt các lệnh bạn muốn chạy trong một tập lệnh (lưu ý rằng khi tập lệnh thoát, máy chủ X thoát):

#!/bin/sh
dbus-launch
pulseaudio --start
sleep 99999999

Khởi động máy chủ X ảo với

xinit /path/to/client.script -- /usr/bin/Xvfb :1 -screen 0 1x1x8

Nếu bạn muốn chạy nó khi khởi động, bạn có thể khởi động nó từ cron. Chạy crontab -e(với tư cách là người dùng của bạn, không phải là root) và thêm dòng

@reboot xinit /path/to/client.script -- Xvfb :1 -screen 0 1x1x8

Nếu bạn muốn giết phiên này, giết xinitquá trình.


Xin lỗi đã làm phiền tôi đấu tranh để tự động thực hiện lệnh bắt đầu pulseaudio (dòng thứ 4 của ví dụ của bạn) khi khởi động. Tôi tự hỏi nếu nó là tài sản HIỂN THỊ. Tôi đã thử RC.local, /etc/init.d, rcS, nhưng tập lệnh không bao giờ khởi động pulseaudio. Khi tôi chạy tập lệnh của mình thông qua SSH, nó hoạt động hoàn hảo. Tôi sẽ rất vui nếu bạn có thể tư vấn.
kursus

Xvfb phải thực hiện một số thiết lập trước khi sẵn sàng chấp nhận kết nối X, vì vậy nếu các lệnh sau chạy quá sớm, bạn có thể thấy chúng không kết nối được với máy chủ X. Bạn có thể muốn xem xét việc sử dụng xinit để khởi động Xvfb và đặt các lệnh đó vào .xinitrc để xinit khởi động chúng chỉ khi Xvfb sẵn sàng cho chúng.
alanc 20/12/13

Tôi xin lỗi tôi đã không làm cho bạn tốt. Tôi có phải bắt đầu Xvfb với .xinitrc không? Ngay bây giờ nó được bắt đầu với RC.local. Nếu vậy tôi phải đặt lệnh PA ở đâu? Tôi đã thử bắt đầu lệnh PA trong .xinitrc nhưng không may mắn, tôi đang thiếu một cái gì đó.
kursus

@kursus Bạn cần chạy tất cả các lệnh này với tư cách là người dùng của bạn. Bạn có thể làm điều đó từ một crontab với @reboot. Ngoài ra alanc là đúng, cần phải có một sự chậm trễ sau khi bắt đầu Xvfb, và xinit giải quyết vấn đề này. Xem chỉnh sửa của tôi.
Gilles 'SO- ngừng trở nên xấu xa'

Cảm ơn đã chỉnh sửa, bây giờ nó rõ ràng hơn. Tuy nhiên, tôi nhận được một tùy chọn Không được nhận dạng: Xvfb khi khởi chạy lệnh xinit, có hoặc không có lệnh gọi tập lệnh.
kursus

1

Tôi đã gặp vấn đề tương tự ngày hôm qua, sử dụng âm thanh Pulse cho raspberrypi 0 W với DBus trong môi trường không đầu tạo với yocto không có x11 và không có systemd, bạn cần chạy và xuất dbus trước khi chạy pulseaudio.

if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then
     echo "Starting dbus" 
     export $(dbus-launch)
fi

Trong etc / Pulse / client.conf, vui lòng bật allow-autospawn-for-root = yes

Chạy pulseaudio -vđể kiểm tra nếu có một vấn đề khác trong cấu hình của bạn. Đừng sử dụng --systemchuyển đổi vì nó sẽ không chính xác.

pulseaudio -D --disallow-exit

0

Có một cách thanh lịch hơn để ngăn tập lệnh tiếp cận EOF hơn là sử dụng sleep 99999999!

Sử dụng sleep infinitythay thế. Nó làm những gì nó nói ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.