ฉันจะกำหนดค่าเสียงด้วย PulseAudio และ Multiseat ได้อย่างไร


12

ด้วยจิตวิญญาณของการเปิดเผยอย่างเต็มรูปแบบฉันเพิ่งโพสต์คำถามนี้ไปยังฟอรัม Ubuntu แต่ฉันคิดว่ามีคนทำงานมากขึ้นเรื่อย ๆ

ฉันมีการตั้งค่าแบบหลายที่นั่งทำงานได้ค่อนข้างดี อุปกรณ์อินพุตฮอตปลั๊กเสียบทำงานตามที่คาดไว้และเช่นนั้น ปัญหาเดียวที่ฉันยังไม่สามารถแก้ไขได้คือการรับเสียงสำหรับแต่ละที่นั่ง

นี่คือบทสรุปของความพยายามของฉันในการทำให้เสียงทำงาน:

  1. Make ~ / .pulse / default.pa กำหนดค่าแบบไดนามิกโดยขึ้นอยู่กับว่า $ DISPLAY ที่ผู้ใช้ลงชื่อเข้าใช้ที่

    • ดูรายละเอียดเพิ่มเติมได้ที่pastebin
  2. โหลด pulseaudio เป็นอินสแตนซ์ทั้งระบบ

    • ไม่สามารถใช้งานได้ ผู้ใช้ไม่สามารถเข้าถึงฮาร์ดแวร์เสียงได้
  3. ใช้กฎ udev เพื่อทำเครื่องหมายที่นั่งใน ConsoleKit ปฏิบัติตามแนวทางของ udev ที่นี่: http://www.freedesktop.org/wiki/Software/systemd/multiseat

    • ฉันไม่คิดว่ามันจะใช้งานได้แม้ว่าจะเป็น "รับประกัน" ให้ทำงานโดยใครบางคนใน irc.freenode #pulseaudio

ความพยายามเหล่านั้นไม่ประสบความสำเร็จซึ่งเป็นเหตุให้ฉันหันไปหาชุมชนเพื่อขอความช่วยเหลือ มันค่อนข้างเป็นไปได้ว่าวิธีการที่แนะนำนั้นใช้ได้ผล นี่เป็นส่วนสุดท้ายของจิ๊กซอว์ที่จำเป็นก่อนที่ฉันจะไปและอัปเดตหน้า MultiseatX เพื่อรวมคำแนะนำสำหรับ Ubuntu 12.04

ความเข้าใจของฉันเกี่ยวกับสถานการณ์: การเข้าถึง pulseaudio นั้น จำกัด เฉพาะเซสชันที่ใช้งานซึ่งทำเครื่องหมายโดย ConsoleKit (บางอย่างเกี่ยวกับ ACL) CK สามารถทำเครื่องหมายหนึ่งเซสชันว่าใช้งานได้ในแต่ละครั้ง ความจริงเล็ก ๆ น้อย ๆ ในชีวิตทำให้ฉันเชื่อว่าการแก้ปัญหาควรเกี่ยวข้องกับ pulseaudio ที่ถูกเรียกใช้เป็นอินสแตนซ์ทั้งระบบ ผู้ใช้แต่ละคนควรเชื่อมต่อกับเซิร์ฟเวอร์ชีพจรและถูก จำกัด ไว้ที่ชุดย่อยของฮาร์ดแวร์ทั้งหมด บางทีผู้ใช้แต่ละคนเชื่อมต่อกับเซิร์ฟเวอร์ชีพจรผ่าน localhost, idk ฉันรู้ว่าไม่คำนึงถึงความพยายามและผลลัพธ์ที่ล้มเหลวของพวกเขาฉันสามารถใช้sudo aplay -D plughw:0,0 /usr/share/sounds/alsa/Front_Center.wavในการเล่นบางอย่างกับฮาร์ดแวร์ใด ๆ

ฉันจับฟางและตอนนี้ลงไปที่ผมไม่กี่ครั้งสุดท้ายที่ฉันสามารถดึงออกมาจากหัวของฉัน โปรดช่วยฉันคิดออกเพื่อเราจะได้แบ่งปันความมั่งคั่ง ข้อมูลเพิ่มเติมใด ๆ ที่จำเป็นจะได้รับตามคำขอของคุณ


ฉันเข้าใจถูกต้องแล้ว: มันเป็นการ์ดเสียง 2 ที่นั่ง 2 เหรอ? คุณแทนที่ default.pa ด้วยไฟล์ที่กำหนดเองขนาดเล็กหรือเพิ่มบรรทัดที่กำหนดเองไปยัง default.pa ที่ไม่เปลี่ยนแปลงหรือไม่?
Takkat

ฉันหวังว่าฉันจะได้สังเกตเห็นความคิดเห็นที่นี่ ... ดังนั้นใช่มันเป็นการ์ดเสียง 2 ใบ หนึ่งคือเสียงออนบอร์ด, อื่น ๆ เป็นเสียงจาก HDMI ใน GPU ไฟล์ที่กำหนดเองขนาดเล็กอยู่ใน ~ / .pulse แต่ /etc/pulse/default.pa ไม่ได้ถูกแตะต้อง ดังนั้นในกรณีนั้นเท่าที่ฉันเข้าใจ ~ / .pulse / default.pa จะไม่แทนที่ /etc/pulse/default.pa แต่จะรวมเข้ากับมัน
แอนโธนี

ลองด้วยไฟล์. pa ที่กำหนดเองสองไฟล์ที่มีเนื้อหาเต็มของ default.pa โดยที่มีการเพิ่มส่วนของอุปกรณ์ต่าง ๆ ในไฟล์ที่มีอยู่สองไฟล์ (ในกรณีที่ไม่ได้ผสาน)
Takkat

นอกจากนี้ default.pa ที่อ่านโดย pulseaudio ที่รันในโหมดทั้งระบบควรอยู่ใน/etc/pulseไม่ใช่ใน HOME
Takkat

ฉันมีมันส่วนใหญ่ทำงาน ATM ฉันจะรายงานกลับเมื่อฉันมีมันหมด
แอนโธนี

คำตอบ:


7

ฉันใช้เวลาหลายชั่วโมงทำการค้นคว้าทางออนไลน์ทดสอบการตั้งค่าต่าง ๆ และพูดคุยกับ Pulseaudio devs สิ่งที่สำคัญที่สุดคือการใช้ pulseaudio ในโหมดผู้ใช้ปกติจะอนุญาตเฉพาะเซสชันที่ใช้งานซึ่งทำเครื่องหมายโดย ConsoleKit เพื่อเข้าถึงฮาร์ดแวร์เสียง เนื่องจาก ConsoleKit ปัจจุบันสามารถทำเครื่องหมายหนึ่งเซสชันว่าใช้งานได้ในแต่ละครั้งซึ่งหมายความว่าเราต้องเรียกใช้อินสแตนซ์ pulseaudio ทั่วทั้งระบบ หัวกลับหัว: แต่ละที่นั่งสามารถมีเสียงแยกกันได้ ข้อเสีย: ฮาร์ดแวร์เสียงทั้งหมดมีให้สำหรับผู้ใช้ทุกคนและสามารถจัดการได้ที่ AT WILL นี่ไม่ใช่สถานการณ์ที่เหมาะสำหรับร้านอินเทอร์เน็ตหรือสถานที่สาธารณะอื่น ๆ ที่ความปลอดภัยเป็นเรื่องจริง โปรดระลึกไว้เสมอเมื่อสร้างนโยบายความปลอดภัยของเว็บไซต์ อาจเป็นการระมัดระวังที่จะ จำกัด การประมวลผล pavucontrol ให้กับผู้ดูแลระบบเท่านั้น

เช่นเคยทำการสำรองข้อมูลไฟล์กำหนดค่าเริ่มต้นทั้งหมดของคุณ หากคุณปรับแต่งค่าคอนฟิกโดยไม่สำรองข้อมูลคุณสามารถดึงแพ็คเกจ pulseaudio ที่ติดตั้ง pulseaudio apt-get -d สิ่งนี้จะดาวน์โหลดแพ็คเกจ (ไปยัง / var / cache / archives / apt) เท่านั้นและคุณสามารถแตกเนื้อหาเพื่อดึงข้อมูลการกำหนดค่าเริ่มต้น โปรดทราบว่า client.conf ไม่รวมอยู่ในนั้น

หากต้องการเรียกใช้ pulseaudio เป็น daemon ทั้งระบบเราต้องแก้ไขไฟล์บางไฟล์

1. ) / etc / default / pulseaudio

    PULSEAUDIO_SYSTEM_START=1

2. ) /etc/pulse/daemon.conf - ดู man pulse-daemon.conf สำหรับข้อมูลเพิ่มเติม

    daemonize = yes
    local-server-type = system

3. ) /etc/pulse/client.conf

    autospawn = no

นอกจากนี้เรายังต้องเพิ่มผู้ใช้ในกลุ่มเข้าถึงชีพจร

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

ตอนนี้ผู้ใช้ทุกคนสามารถเข้าถึงฮาร์ดแวร์เสียงได้เราต้องเลือกฮาร์ดแวร์ที่ผู้ใช้แต่ละคนจะใช้ สิ่งนี้สามารถทำได้โดยใช้ pavucontrol โปรดทราบว่าการตั้งค่าจะถูกจัดเก็บต่อผู้ใช้และจะไม่ติดตามที่นั่ง หากผู้ใช้เปลี่ยนที่นั่งคุณจะต้องเลือกฮาร์ดแวร์เสียงที่ต้องการอีกครั้ง

ความคิดเห็นเพิ่มเติมเกี่ยวกับ Pulseaudio

ฉันหวังว่าจะมีทางออกที่หรูหรากว่าสำหรับการทำงานเสียงต่อที่นั่ง การใช้ Pulseaudio ทั้งระบบในมัลติซีทมีข้อเสียมากมายและไม่เสถียรอย่างสมบูรณ์ระหว่างการรีบูต ฉันพยายามเริ่มต้นอินสแตนซ์ทั้งระบบและให้อินสแตนซ์ผู้ใช้เชื่อมต่อกับเซิร์ฟเวอร์ผ่าน localhost ที่ดูเหมือนจะไม่ทำงานตั้งแต่เมื่อ pulseaudio - เริ่มต้นทำงานก็แหล่ง daemon.conf

เกี่ยวกับ ConsolKit

ปัญหาที่เราเห็นเมื่อใช้ pulseaudio ต่อผู้ใช้ปกติคือหนึ่งที่นั่งมีการเข้าถึงฮาร์ดแวร์และอื่น ๆ ทั้งหมดมี Dummy Output นี่เป็นเพราะ ConsoleKit ไม่ได้ตระหนักถึงเรื่องที่นั่ง CK พิจารณาที่นั่งทั้งหมดของเราเป็นที่นั่ง 1 และสามารถทำเครื่องหมายหนึ่งเซสชันว่าใช้งานได้ ความจริงนี้สามารถเห็นได้โดยการเรียกใช้ getfacl / dev / snd / * ความคิดเกิดขึ้นกับฉันว่าเราอาจสามารถแก้ไข acl ของไฟล์ / dev / snd / ที่เหมาะสมตาม $ DISPLAY ที่ผู้ใช้แต่ละรายกำลังใช้อยู่ นี่คือตัวเลือกที่ฉันยังไม่ได้สำรวจ โปรดพิจารณาการมีส่วนร่วมในหลายสาเหตุโดยสำรวจสมมติฐานนี้และแก้ไขเอกสารด้วยสิ่งที่คุณค้นพบ

มีสาขาย่อยหลายรายการสำหรับConsoleKit , GDM-2.3และGDM-3.x ที่มีอยู่ซึ่งควรจัดเตรียมไว้สำหรับฟังก์ชันการทำงานของมัลติซีตอัตโนมัติ

หมายเหตุเพิ่มเติม

1. ) เป็นการดีที่จะไม่อนุญาตให้ผู้ใช้โหลดโมดูล DISALLOW_MODULE_LOADING = 1 ด้วย

2. ) autospawn = ไม่ไม่จำเป็นอย่างที่เห็นในไฟล์ตัวอย่างของฉัน มันทำให้ไม่มีปัญหา


1
แอนโทนี่ขอบคุณสำหรับการโพสต์ของคุณมันเป็นประโยชน์! ฉันพบปัญหาเดียวกันและพบวิธีการบรรลุผลลัพธ์ที่ต้องการโดยไม่ต้องใช้ Pulseaudio ใน System Mode ลองดู: unix.stackexchange.com/a/104344/34581 ฉันหวังว่ามันจะมีประโยชน์
Ilia Rostovtsev

1

ความเข้าใจของฉันเกี่ยวกับสถานการณ์: การเข้าถึง pulseaudio นั้น จำกัด เฉพาะเซสชันที่ใช้งานซึ่งทำเครื่องหมายโดย ConsoleKit (บางอย่างเกี่ยวกับ ACL) CK สามารถทำเครื่องหมายหนึ่งเซสชันว่าใช้งานได้ในแต่ละครั้ง

มีโปรแกรมแก้ไขเพื่อ ConsoleKitเพื่อเพิ่มการสนับสนุนหลายรายการ การทำเช่นนี้จะช่วยให้สามารถรายงานที่นั่งที่ใช้งานได้ทั้งหมดว่าทำงาน บางทีนี่อาจจะแก้ปัญหาของคุณ ต้องการความร่วมมือกับผู้จัดการการแสดงผลและมีโปรแกรมแก้ไขสำหรับ GDM รุ่นเก่าที่เพิ่มการสนับสนุนนี้

ผมได้ทำงานใน MultiSeat Natty (11.04) โดยใช้แพคเกจ ConsoleKit และ GDM ปรับเปลี่ยนจากสัญญาซื้อขายไฟฟ้า ฉันยังไม่ได้อัพเกรดจาก Natty แต่ใช้เวลานานกว่าจะคิดได้ว่าจะทำงานอย่างไรและฉันกังวลว่า LightDM จะไม่ทำงานกับ ConsoleKit ที่ได้รับการติดตั้งแล้ว

แก้ไข: ฉันควรทราบว่า Fedora 17 มีคุณสมบัติมัลติซีสที่น่าประทับใจซึ่งบางส่วนจะอยู่ในปริมาณ พวกเขามีหน้าวิกิพีเดียอธิบายแนวทางของพวกเขา Ubuntu ไม่สามารถคัดลอกแนวทางของ Fedora ได้เพียงเพราะต้องการการเปลี่ยนแปลงที่สำคัญ Fedora ใช้ systemd และ GDM ในขณะที่ Ubuntu ใช้ upstart และ LightDM


ฮ่า ๆ. ฉันรู้เรื่องหลายสาขา ConsoleKit และ GDM คุณจะสังเกตเห็นว่าฉันเชื่อมโยงกับพวกเขาในหน้าUbuntu MultiseatXที่ฉันอยู่ระหว่างการปรับปรุง ที่จริงแล้วสาขา ck ขึ้นอยู่กับสาขา gdm บุคคลเหล่านี้ดูแลจาก Oracle PPA ที่คุณอ้างถึงเป็นสิ่งที่ฉันรู้จักและไม่ได้มีไว้สำหรับ 12.04 ฉันพยายามทำในลักษณะที่ไม่เกี่ยวข้องกับการออกไปข้างนอก repos มาตรฐาน เกี่ยวกับ Fedora และ systemd ... วิธีการมัลติซิตี systemd จะไม่ทำงานกับไบนารีของ nvidia
แอนโทนี่

0

ฉันเพิ่งพยายามแก้ไขปัญหาด้วย PulseAudio และ Multiseat เมื่อเห็นว่าไม่มีวิธีแก้ปัญหาที่หรูหราวิธีแก้ปัญหาของฉันคือใช้เครือข่าย

โซลูชันนี้เหมาะสมกับสถานการณ์ของฉันเพราะฉันเป็นผู้ใช้ที่ส่วนใหญ่อยู่ในเครื่องและที่นั่งของฉันมักจะเข้าสู่ระบบและที่นั่งของฉันถูกกำหนดค่าไว้ทางซ้ายและไม่มีใครใช้เลย

ในฉัน~/.config/pulse/default.paฉันคัดลอกการกำหนดค่าระบบของ/etc/pulse/default.paและเพิ่มบรรทัดต่อไปนี้:

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

ในการตั้งค่า pulseaudio ของผู้ใช้รายอื่นให้เพิ่มอุโมงค์ - หรือหลายรายการหากนั่นคือสิ่งที่คุณต้องการ - ด้วยบางสิ่งตาม:

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

เปลี่ยนชื่อซิงค์เพื่อให้ตรงกับในเครื่องของคุณ คุณสามารถตัดสินใจในการกำหนดค่าชื่อมิตร --which หมายความว่าคุณควรกำหนดค่าที่ในการตั้งค่าของคุณ PulseAudio file-- pacmd list-sinksแต่ฉันเพียงแค่ใช้ชื่อที่กำหนดโดยการมองมันด้วย

มันไม่ใช่ทางออกที่สง่างามฉันอาจจะลองใช้การกำหนดค่าทั่วทั้งระบบตามที่ @Anthony แนะนำในอุปกรณ์ถัดไปของฉัน แต่ถ้าคุณมีการ์ดจำนวนมากและต้องการแชร์อ่างล้างมือ / แหล่งข้อมูลเพียงเล็กน้อย วิธีแก้ปัญหา "ศัลยกรรม" เพิ่มเติม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.