ฉันจะรันสคริปต์บนสัญญาณ dbus ได้อย่างไร


13

เป็นไปได้หรือไม่ที่จะรันสคริปต์บนสัญญาณ dbus ตามอำเภอใจ? บางอย่างเช่นการพุ่งพรวดที่ทำงานในฐานะผู้ใช้ที่ไม่มีสิทธิพิเศษและไม่ต้องการการปรับเปลี่ยนระดับรูท

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

แก้ไข:คำถามเดิมของฉันไม่ได้ระบุสิ่งนี้ แต่ฉันหมายถึง "เชื่อมโยงสคริปต์จำนวนหนึ่งเข้ากับหนึ่งในชุดกิจกรรม" - ดังนั้นฉันจึงมีตัวเรียกใช้ -y สิ่งเดียวกัน (เช่น Upstart) ที่จัดการสคริปต์จำนวนหนึ่ง ซึ่งแต่ละอันให้ความสำคัญกับสัญญาณ dbus ที่แตกต่างกัน ทั้งหมดในพื้นที่ของผู้ใช้


อาจจะไม่ใช่สิ่งที่คุณมองหา แต่ปรากฏขึ้นในใจของฉันเมื่อคุณพูดถึงพุ่งพรวด คุณสามารถเรียกสคริปต์กับ systemd ฉันไม่แน่ใจว่าหน่วยประเภทใดที่สร้างอุปกรณ์บลูทู ธ ของคุณ แต่ฉันคิดว่ามันมีอยู่
sumid

คำตอบ:


16

คุณต้องการ dbus-monitor

สคริปต์จะมีลักษณะเหมือน

#!/bin/bash

interface=org.gnome.Rhythmbox.Player
member=playingUriChanged

# listen for playingUriChanged DBus events,
# each time we enter the loop, we just got an event
# so handle the event, e.g. by printing the artist and title
# see rhythmbox-client --print-playing-format for more output options

dbus-monitor --profile "interface='$interface',member='$member'" |
while read -r line; do
  printf "Now playing: "
  rhythmbox-client --print-playing
done

ที่นำมาจากStackOverflow

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