รันสคริปต์โดยอัตโนมัติหลังจากที่ฉันเสียบหรือถอดปลั๊กอุปกรณ์ USB


22

ฉันจะทำอย่างไรเพื่อเรียกใช้สคริปต์โดยอัตโนมัติหลังจากฉันเมานต์ / ปลั๊กอินหรือเลิกเมานท์ / ถอดอุปกรณ์ USB


2
@XxxXxx: ไม่ใช่ตัวเลือกตราบใดที่ Cuttlefish ไม่มีรุ่นวางจำหน่ายสำหรับ Ubuntu 12.10
Radu Rădeanu

2
เป็นไปได้ซ้ำ: askubuntu.com/questions/25071/…
Glutanimate

@ Glutanimate: คำถามนั้นเกี่ยวกับแฟลชไดรฟ์ USB เฉพาะ แต่ฉันถามเกี่ยวกับอุปกรณ์ USB โดยทั่วไป
Radu Rădeanu

@Glutanimate: สมมติว่าคำตอบของคำถามนั้นมีประโยชน์ แต่ก็ไม่ตอบว่าจะรันสคริปต์โดยอัตโนมัติอย่างไรหลังจากที่ฉันถอดปลั๊กอุปกรณ์ USB
Radu Rădeanu

1
"ให้บอกว่าคำตอบของคำถามนั้นมีประโยชน์อยู่แล้ว แต่ก็ไม่ตอบว่าจะรันสคริปต์โดยอัตโนมัติหลังจากที่ฉันถอดปลั๊กอุปกรณ์ USB" ฉันเดาว่าถ้าคุณเปลี่ยน "ACTION = 'เพิ่ม'" เป็น "ACTION = 'remove' "ซึ่งจะเป็นจุดเริ่มต้นที่ดี
blujay

คำตอบ:


17

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

คุณจะต้องมีไฟล์ 5 (ห้า) ไฟล์สำหรับอุปกรณ์ USB ดังต่อไปนี้เพียงกรอกค่าตามลำดับ<fortheseparts>:

/etc/udev/rules.d/00-usb-<yourdevice>.rules

ACTION=="add", ATTRS{idVendor}=="<yourvendorid>", ATTRS{idProduct}=="<yourproductid>", ENV{XAUTHORITY}="/home/<user>/.Xauthority", ENV{DISPLAY}=":0", OWNER="<user>", RUN+="/usr/local/bin/usb-<yourdevice>-in_udev"    
ACTION=="remove", ATTRS{idVendor}=="<yourvendorid>", ATTRS{idProduct}=="<yourproductid>", ENV{XAUTHORITY}="/home/<user>/.Xauthority", ENV{DISPLAY}=":0", OWNER="<user>", RUN+="/usr/local/bin/usb-<yourdevice>-out_udev"

/usr/local/bin/usb-<yourdevice>-in_udev

#!/bin/bash
/usr/local/bin/usb-<yourdevice>-in &

/usr/local/bin/usb-<yourdevice>-in

#!/bin/bash
sleep 1
<yourbashscriptcode>

/usr/local/bin/usb-<yourdevice>-out_udev

#!/bin/bash
/usr/local/bin/usb-<yourdevice>-out &

/usr/local/bin/usb-<yourdevice>-out

#!/bin/bash
sleep 1
<yourbashscriptcode>

หมายเหตุ:

  1. คุณสามารถจับภาพค่า<yourvendorid>และ<yourproductid>โดยการป้อนคำสั่งlsusbใน Terminal - เมื่ออุปกรณ์เสียบ USB ใน - ซึ่งจะแสดงรายการอุปกรณ์ USB ของคุณทั้งหมดมีอยู่ในปัจจุบันเช่นBus 003 Device 002: ID 8087:07da Intel Corp.ที่8087เป็นVendorIDและ07daเป็นProductID
  2. และ<yourdevice>สามารถใด ๆโดยพลชื่อที่คุณอาจเลือกสำหรับอุปกรณ์ USB ของคุณตัวอย่างเช่นผมเลือกที่จะใช้ชื่อสามัญ " แป้นพิมพ์ " เมื่อมีการสร้างไฟล์ดังกล่าวสำหรับแป้นพิมพ์ USB ของฉันซึ่งจำเป็นต้องใช้รูปแบบแป้นพิมพ์ที่แตกต่างกันเมื่อใดก็ตามที่เสียบปลั๊ก
  3. ในบางสถานการณ์คุณอาจไม่จำเป็นต้องใช้ACTION=="remove"บรรทัดในไฟล์ udev rules ดังนั้นจึงมีการเชื่อมโยงไฟล์ 2 (สอง) " out" เมื่อคุณไม่จำเป็นต้องทำสิ่งใด (เช่นย้อนกลับการเปลี่ยนแปลงที่เกิดขึ้นเมื่ออุปกรณ์เป็น เสียบ) หลังจากเสียบปลั๊กอุปกรณ์แล้ว

นี่มันผิดไปจากมุมมองของฉัน ประโยคเหล่านั้นไม่จำเป็นต้องอยู่ในบรรทัดเดียวกันหรือไม่?
nafg

1
ใช้งานได้: ACTION == "เพิ่ม", ATTRS {idVendor} == "... ", ATTRS {idProduct} == "... ", ENV {XAUTHORITY} = "/ home / <user> /.Xauthority" , ENV {DISPLAY} = ": 0", RUN + = "<script>"
nafg

@nafg: จากมุมมองสามเณรของฉันมันไม่ควรสร้างความแตกต่างถ้าคุณใส่ทุกอย่างในบรรทัดเดียว (ใช้เครื่องหมายจุลภาคเป็นตัวคั่น) ในไฟล์กฎ udev แต่ฉันเห็นว่าคุณได้เพิ่มพารามิเตอร์ XAUTHORITY และ DISPLAY ไปยังกฎ udev ซึ่ง อาจทำงานให้คุณหรือคนอื่นในกรณีนี้ฉันสงสัยว่าพวกเขาไม่จำเป็นในไฟล์สคริปต์สองไฟล์ด้านล่าง
Sadi

1
ใช่นั่นคือจุดที่คุณไม่จำเป็นต้องสคริปต์กลาง (ยกเว้นอาจจะใส่สคริปต์จริงในพื้นหลัง) อีกต่อไปตั้งแต่ udev ช่วยให้คุณกำหนดสภาพแวดล้อม ความเข้าใจของฉันจากเอกสาร udev คือแต่ละบรรทัดเป็นกฎอิสระบรรทัดในไฟล์จะไม่รวมกัน
nafg

@nafg: ขอบคุณสำหรับการสนับสนุนอันมีค่าของคุณ ฉันย้ายสภาพแวดล้อมเหล่านี้ไปยัง udev rule และมันก็ใช้ได้กับฉันเช่นกัน นอกจากนี้ฉันย้ายสคริปต์ไปยัง / usr / local / bin เมื่อฉันเริ่มประสบปัญหาหลังจากที่ฉันย้ายโฟลเดอร์ / home ของฉันไปยังพาร์ติชันแยกต่างหากด้วยตนเอง (อาจเป็นเพราะไม่ได้ติดตั้งไว้ก่อนหน้านี้) ดูเหมือนว่าการใช้ตัวแบ่งบรรทัดในกฎ udev ไม่ก่อให้เกิดปัญหาใด ๆ อย่างน้อยในระบบของฉัน (Ubuntu 13.04 64 บิต) และฉันชอบสิ่งนี้สำหรับการอ่าน
Sadi

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