Làm cách nào để định cấu hình âm thanh với PulseAudio và Multiseat?


12

Trong tinh thần tiết lộ đầy đủ, tôi chỉ đăng câu hỏi này lên các diễn đàn ubfox, nhưng tôi cho rằng nhiều người làm việc trên đó không thể làm tổn thương.

Tôi có một thiết lập nhiều chỗ ngồi làm việc khá tốt. Thiết bị đầu vào cắm nóng hoạt động như mong đợi và như vậy. Vấn đề duy nhất tôi vẫn không thể giải quyết là lấy âm thanh cho từng chỗ ngồi.

Dưới đây là tóm tắt về những nỗ lực của tôi trong việc làm cho âm thanh hoạt động:

  1. Tạo ~ / .pulse / default.pa được định cấu hình động dựa trên $ HIỂN THỊ người dùng đăng nhập tại.

    • Xem pastebin này để biết chi tiết.
  2. Tải pulseaudio như một phiên bản toàn hệ thống.

    • Không thể làm điều này để làm việc. Không có phần cứng âm thanh nào có thể truy cập được cho người dùng.
  3. Sử dụng quy tắc udev để đánh dấu chỗ ngồi trong ConsoleKit. Theo hướng dẫn của udev được tìm thấy ở đây: http://www.freedesktop.org/wiki/Software/systemd/multiseat

    • Tôi không nghĩ rằng nó sẽ hoạt động, mặc dù nó được "đảm bảo" hoạt động bởi một người nào đó trong irc.freenode #pulseaudio

Không ai trong số những nỗ lực đó mang lại thành công, đó là lý do tại sao bây giờ tôi chuyển sang cộng đồng để được giúp đỡ. Hoàn toàn có khả năng các phương thức được đề xuất hoạt động và tôi chỉ làm rối tung một số khía cạnh của nó, idk. Đây là mảnh ghép cuối cùng cần thiết trước khi tôi có thể đi và cập nhật trang MultiseatX để bao gồm các hướng dẫn cho Ubuntu 12.04.

Hiểu biết của tôi về tình huống: Truy cập vào pulseaudio bị giới hạn trong phiên hoạt động như được đánh dấu bởi ConsoleKit (một cái gì đó về ACL). CK chỉ có thể đánh dấu một phiên là hoạt động tại một thời điểm. Thực tế nhỏ bé này của cuộc sống khiến tôi tin rằng giải pháp nên liên quan đến pulseaudio được vận hành như một ví dụ trên toàn hệ thống. Mỗi người dùng nên kết nối với máy chủ xung và được giới hạn trong một tập hợp con của tất cả phần cứng. Có thể mỗi người dùng kết nối với máy chủ xung thông qua localhost, idk. Tôi biết rằng bất kể nỗ lực của tôi và kết quả thất bại của họ, tôi luôn có thể sử dụng sudo aplay -D plughw:0,0 /usr/share/sounds/alsa/Front_Center.wavđể chơi một cái gì đó cho bất kỳ phần cứng nào.

Tôi đang nắm lấy ống hút và bây giờ xuống đến vài sợi tóc cuối cùng tôi có thể nhổ ra khỏi đầu. Xin vui lòng, giúp tôi tìm ra điều này để chúng ta có thể chia sẻ sự giàu có. Bất kỳ thông tin bổ sung cần thiết sẽ được cung cấp theo yêu cầu của bạn.


Tôi đã hiểu đúng chưa: đó là 2 chỗ ngồi 2 soundcard? Bạn đã thay thế default.pa bằng các tệp tùy chỉnh nhỏ hay thêm các dòng tùy chỉnh vào default.pa không thay đổi?
Takkat

Tôi ước tôi có thể nhận thấy bình luận ở đây ... Vì vậy, đó là 2 card âm thanh. Một là âm thanh trên bo mạch, hai là âm thanh từ HDMI trong gpu. Các tệp tùy chỉnh nhỏ nằm trong ~ / .pulse nhưng /etc/pulse/default.pa không được sử dụng. Vì vậy, trong trường hợp đó, theo như tôi hiểu, ~ / .pulse / default.pa sẽ không thay thế /etc/pulse/default.pa, mà là hợp nhất với nó.
Anthony

Hãy thử với hai tệp .pa tùy chỉnh với nội dung đầy đủ của default.pa trong đó phần thiết bị khác nhau như trong hai tệp hiện có được thêm vào (trong trường hợp chúng không được hợp nhất).
Takkat

Ngoài ra, default.pa được đọc bởi pulseaudio chạy ở chế độ toàn hệ thống phải ở trong /etc/pulse, không phải trong HOME.
Takkat

tôi có nó chủ yếu làm việc atm. Tôi sẽ báo cáo lại khi tôi đã giải quyết xong.
Anthony

Câu trả lời:


7

Tôi đã dành nhiều giờ để nghiên cứu trực tuyến, thử nghiệm các thiết lập khác nhau và nói chuyện với các nhà phát triển Pulseaudio. Điểm mấu chốt của tất cả là việc chạy pulseaudio ở chế độ người dùng thông thường sẽ chỉ cho phép phiên hoạt động được đánh dấu bởi ConsoleKit để truy cập phần cứng âm thanh. Vì ConsoleKit hiện tại chỉ có thể đánh dấu một phiên là hoạt động tại một thời điểm, điều này có nghĩa là chúng ta phải chạy một phiên bản pulseaudio trên toàn hệ thống. Ưu điểm: Mỗi chỗ ngồi có thể có âm thanh riêng. Nhược điểm: TẤT CẢ phần cứng âm thanh có sẵn cho bất kỳ người dùng nào và có thể bị thao túng TẠI SILL. Đây không phải là một tình huống lý tưởng cho một quán cà phê internet hoặc môi trường công cộng khác, nơi an ninh là mối quan tâm thực sự. Hãy ghi nhớ điều này khi tạo chính sách bảo mật trang web của bạn. Có thể nên thận trọng khi hạn chế thực thi pavucontrol đối với quản trị viên.

Như mọi khi, tạo một bản sao lưu của tất cả các tệp cấu hình mặc định của bạn. Nếu bạn đã sửa đổi cấu hình của mình mà không cần sao lưu, bạn có thể truy xuất gói pulseaudio với cài đặt pulseaudio apt-get -d. Điều này sẽ chỉ tải xuống gói (đến / var / cache / archives / apt) và bạn có thể trích xuất nội dung để lấy các cấu hình mặc định. Xin lưu ý rằng client.conf không được bao gồm trong đó.

Để chạy pulseaudio như một trình nền toàn hệ thống, chúng ta cần chỉnh sửa một vài tệp.

1.) / etc / default / pulseaudio

    PULSEAUDIO_SYSTEM_START=1

2.) /etc/pulse/daemon.conf - Xem man Pulse-daemon.conf để biết thêm thông tin.

    daemonize = yes
    local-server-type = system

3.) /etc/pulse/client.conf

    autospawn = no

Chúng tôi cũng cần thêm người dùng vào nhóm truy cập xung.

sudo usermod -a -G pulse-access <username>

Bây giờ tất cả người dùng có thể truy cập phần cứng âm thanh, chúng tôi cần chọn phần cứng mà mỗi người dùng sẽ sử dụng. Điều này có thể được thực hiện bằng cách sử dụng pavucontrol. Xin lưu ý rằng các cài đặt được lưu trữ PER USER và sẽ không tuân theo chỗ ngồi. Nếu người dùng chuyển đổi chỗ ngồi, bạn sẽ cần chọn lại phần cứng âm thanh mong muốn.

Nhận xét bổ sung về Pulseaudio

Tôi đã hy vọng rằng sẽ có một giải pháp thanh lịch hơn để làm cho âm thanh trên mỗi ghế ngồi hoạt động. Sử dụng Pulseaudio trên toàn hệ thống trong nhiều trang có nhiều nhược điểm và không hoàn toàn ổn định giữa các lần khởi động lại. Tôi đã cố gắng bắt đầu một phiên bản toàn hệ thống và có các phiên bản người dùng kết nối với nó như một máy chủ thông qua localhost. Điều đó dường như không hoạt động kể từ khi pulseaudio - bắt đầu chạy nó nguồn daemon.conf.

Về ConsolKit

Vấn đề chúng ta thấy khi chạy pulseaudio bình thường cho mỗi người dùng là một chỗ ngồi có quyền truy cập vào phần cứng và tất cả những người khác có Đầu ra giả. Điều này là do ConsoleKit không hoàn toàn nhận biết chỗ ngồi. CK coi tất cả các ghế của chúng tôi là phiên của ghế1 và chỉ có thể đánh dấu một phiên là hoạt động. Thực tế này có thể được nhìn thấy bằng cách chạy getfacl / dev / snd / *. Tôi nghĩ rằng chúng tôi có thể chỉnh sửa acl của các tập tin / dev / snd / thích hợp dựa trên $ HIỂN THỊ mà một người dùng cụ thể đang sử dụng. Đây là một lựa chọn mà tôi chưa khám phá. Vui lòng xem xét việc đóng góp cho nguyên nhân nhiều lần bằng cách khám phá giả thuyết này và chỉnh sửa tài liệu với những phát hiện của bạn.

Các nhánh nhiều lớp cho ConsoleKit , GDM-2.3GDM-3.x tồn tại, điều này sẽ cung cấp cho chức năng đa luồng tự động.

Ghi chú bổ sung

1.) Sẽ là khôn ngoan khi cũng không cho phép người dùng tải các mô-đun DISALLOW_MODULE_LOADING = 1.

2.) autospawn = no không hoàn toàn cần thiết như trong tệp ví dụ của tôi. Nó gây ra không có vấn đề.


1
Anthony, cảm ơn cho bài viết của bạn nó rất hữu ích! Tôi đã đối mặt với cùng một vấn đề và tìm ra cách đạt được kết quả mong muốn mà không cần chạy Pulseaudio ở Chế độ hệ thống. Hãy xem: unix.stackexchange.com/a/104344/34581 . Tôi hy vọng nó sẽ hữu ích.
Ilia Rostovtsev

1

Hiểu biết của tôi về tình huống: Quyền truy cập vào pulseaudio bị giới hạn trong phiên hoạt động như được đánh dấu bởi ConsoleKit (một cái gì đó về ACL). CK chỉ có thể đánh dấu một phiên là hoạt động tại một thời điểm.

Có một bản vá cho ConsoleKit để thêm hỗ trợ nhiều trang; điều này sẽ cho phép nó báo cáo tất cả các ghế đang hoạt động là hoạt động. Có lẽ điều này sẽ khắc phục vấn đề của bạn. Nó cần sự hợp tác với người quản lý hiển thị và có một bản vá cho các phiên bản cũ của GDM có thêm hỗ trợ này.

Tôi đã nhận được nhiều hoạt động trong Natty (11.04) bằng cách sử dụng các gói ConsoleKit và GDM được sửa đổi từ PPA . Tôi chưa nâng cấp từ Natty - tôi mất nhiều thời gian để tìm ra cách để nó hoạt động và tôi lo lắng rằng LightDM sẽ không hoạt động với ConsoleKit được vá.

EDIT: Tôi nên lưu ý rằng Fedora 17 có một số tính năng đa điểm ấn tượng, một số tính năng sẽ có trong Quantal. Họ có một trang wiki mô tả cách tiếp cận của họ . Ubuntu không thể đơn giản sao chép cách tiếp cận của Fedora vì nó sẽ yêu cầu thay đổi đáng kể; Fedora sử dụng systemd và GDM trong khi Ubuntu sử dụng mới và LightDM.


Cười lớn. Tôi đã biết về các nhánh ConsoleKit và GDM nhiều trang. Bạn sẽ nhận thấy rằng tôi đã liên kết với họ trong trang Ubuntu MultiseatX mà tôi đang trong quá trình cập nhật. Trên thực tế, nhánh ck phụ thuộc vào nhánh gdm. Chúng được duy trì bởi cùng một người từ Oracle. PPA mà bạn tham chiếu cũng là thứ tôi đã biết và không có trong 12.04. Tôi đang cố gắng thực hiện theo cách không liên quan đến việc đi ra ngoài các repos tiêu chuẩn. Về Fedora và systemd ... cách tiếp cận đa hệ thống sẽ KHÔNG hoạt động với nhị phân nvidia.
Anthony

0

Gần đây tôi đã cố gắng giải quyết vấn đề với PulseAudio và Multiseat. Thấy rằng không có giải pháp tao nhã, cách giải quyết của tôi là sử dụng mạng.

Giải pháp này phù hợp với kịch bản của tôi bởi vì tôi là người dùng thường xuyên ở trong máy và chỗ ngồi của tôi thường xuyên đăng nhập nhất. Và chỗ ngồi của tôi được cấu hình thuận tay trái và không ai khác sử dụng nó.

Trong tôi đã ~/.config/pulse/default.pasao chép cấu hình hệ thống /etc/pulse/default.pavà thêm dòng sau:

load-module module-native-protocol-tcp auth-anonymous=1 auth-ip-acl=127.0.0.1

Trong cài đặt pulseaudio của người dùng khác, hãy thêm một đường hầm - hoặc một vài đường hầm, nếu đó là những gì bạn cần-- với một cái gì đó cùng:

load-module module-tunnel-sink server=127.0.0.1 sink=alsa_output.pci-0000_00_XX.X.iec958-stereo

Thay đổi tên chìm để khớp với tên trong máy của bạn. Bạn có thể quyết định định cấu hình tên thân thiện hơn - nghĩa là bạn nên định cấu hình tên đó trong tệp cài đặt pulseaudio của mình-- nhưng tôi chỉ sử dụng tên đã cho bằng cách tìm tên đó pacmd list-sinks.

Đây không phải là một giải pháp tao nhã, tôi có thể sẽ cố gắng sử dụng cấu hình toàn hệ thống theo đề xuất của @Anthony trong giàn tiếp theo của tôi, nhưng nếu bạn có nhiều thẻ và chỉ muốn chia sẻ một hoặc một vài nguồn / nguồn, thì đây là thêm giải pháp "phẫu thuật".

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.