โปรแกรมทำงานใน SSH ที่เข้าถึง pulseaudio บนเครื่องที่ทำงาน


10

ฉันต้องการเรียกใช้โปรแกรมจากระยะไกล (ผ่าน ssh) แต่ด้วยเสียงไปที่เครื่องระยะไกลที่โปรแกรมทำงานจริง โดยปกติจะใช้งานกับ ALSA ได้ แต่ pulseaudio จะตรวจสอบตัวตรวจสอบสิทธิ์เซสชันก่อนที่จะอนุญาตการเชื่อมต่อจากไคลเอนต์

จะทำให้การตรวจสอบนี้เข้มงวดน้อยลงได้อย่างไร?

local: $ ssh remote           # remote is running pulseaudio and has sound hardware

remote:$ paplay something.wav
Connection failure: Connection refused

pa_context_connect() failed: Connection refused
remote:$ audacious something.mp3 # opens on local's X11 display
pulseaudio: Failed to connect to server: Connection refused
pulseaudio: Failed to connect to server: Connection refused

ตรวจสอบคำตอบของฮันส์สำหรับการอัปเดต pax11publish -rใช้ได้กับ Ubuntu 19.10 ของฉัน
Stephen Boston

คำตอบ:



2

ผู้ร้ายคือ ssh ไม่ได้ตั้งค่าDBUS_SESSION_BUS_ADDRESSซึ่งใช้เพื่อเชื่อมต่อกับ Pulseaudio วิธีแก้ปัญหา (ตามโพสต์นี้ ) คือการเพิ่มบรรทัดต่อไปนี้เพื่อของฉัน~/.bashrcซึ่งจะใช้เมื่อเชื่อมต่อผ่าน ssh:

if [[ -n $SSH_CLIENT ]]; then
    export DBUS_SESSION_BUS_ADDRESS=`cat /proc/$(pidof nautilus)/environ | tr '\0' '\n' | grep DBUS_SESSION_BUS_ADDRESS | cut -d '=' -f2-`
fi

มันใช้ PID ของหอยโข่ง (คุณอาจจำเป็นต้องเปลี่ยนเพื่อให้ได้กระบวนการที่มักจะทำงานในเซสชั่น) และค้นหาตัวแปรสภาพแวดล้อมของมันDBUS_SESSION_BUS_ADDRESSและส่งออก

ทำให้โปรแกรมเชื่อมต่อกับ Pulse run ได้ โปรแกรมอื่น ๆ สื่อสารผ่านเซสชัน d-bus เช่นกัน (เช่น audtool สำหรับการขับขี่อย่างกล้าหาญเหนือบรรทัดคำสั่ง)


บน Ubuntu 16.04 คำสั่งจะต้องเป็นexport DBUS_SESSION_BUS_ADDRESS=$(sudo cat /proc/$(pidof nautilus | cut -f1 -d" ")/environ | tr '\0' '\n' | grep DBUS_SESSION_BUS_ADDRESS | cut -d '=' -f2-)เพราะ pidof ส่งคืนทั้ง processid และ parent processid แต่ในกรณีของฉันโซลูชันนี้ใช้ไม่ได้ ฉันยังคงประสบconnection refusedปัญหา
Hans Deragon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.