ฉันต้องการสคริปต์ที่ทิ้งบันทึกและเริ่มเข้าสู่ระบบเมื่อมีการเสียบที่เก็บข้อมูล usb (โดยมีไฟล์ 'OKdump' อยู่) และหากพบสิ่งผิดปกติ (เช่นข้อผิดพลาดที่มองเห็นได้) ฉันต้องการ เพื่อถ่ายภาพหน้าจอและบันทึกลงในไดรฟ์เดียวกัน
ฉันต้องการสคริปต์ที่ทิ้งบันทึกและเริ่มเข้าสู่ระบบเมื่อมีการเสียบที่เก็บข้อมูล usb (โดยมีไฟล์ 'OKdump' อยู่) และหากพบสิ่งผิดปกติ (เช่นข้อผิดพลาดที่มองเห็นได้) ฉันต้องการ เพื่อถ่ายภาพหน้าจอและบันทึกลงในไดรฟ์เดียวกัน
คำตอบ:
ใช้ Udev Udev เป็น daemon ตัวจัดการอุปกรณ์ เหนือสิ่งอื่นใดมันเป็นความรับผิดชอบในการตั้งชื่ออุปกรณ์ของคุณ คุณสามารถกำหนด udev-rules ได้โดยวางไฟล์ด้วยไวยากรณ์ที่แน่นอนในไดเรกทอรี rules กฎสามารถทำสิ่งต่าง ๆ - โดยเฉพาะพวกเขาสามารถเรียกใช้สคริปต์เมื่อมีการเชื่อมต่ออุปกรณ์บางอย่าง
ก่อนอื่นคุณต้องรวบรวมข้อมูลบนอุปกรณ์ของคุณ /dev/sdb1
สมมติว่าคุณเชื่อมต่อมันและรู้ว่ามันเป็นไปภายใต้ชื่อ ถ้าเป็นเช่นนั้น:
udevadm info -a -p $(udevadm info -q path -n /dev/sdb1)
คำสั่งจะส่งออกข้อมูลเกี่ยวกับอุปกรณ์ของคุณ มันค่อนข้างยาว คุณต้องค้นหาสิ่งที่ระบุอุปกรณ์โดยเฉพาะ นั่นอาจจะเป็นอนุกรมเหมือนATTRS{serial}=="UA04FLGC"
หรือการรวมกันของคุณลักษณะอื่น ๆ เช่นและATTRS{idVendor}
ATTRS{idProduct}
ชื่อส่วนใหญ่เป็นคำอธิบายตัวเองไม่มากก็น้อย เลือกอย่างใดอย่างหนึ่งหรือหลายอย่างรวมกันที่ดูสมเหตุสมผล - หากไม่ได้ผลให้ลองใช้อย่างอื่น
เมื่อคุณได้พบตัวระบุที่ไม่ซ้ำกันสร้างไฟล์ในการเริ่มต้นด้วยตัวเลขสองหลักและจบลงด้วย/etc/udev/rules.d
.rules
ตัวเลขสองหลักระบุลำดับของการประมวลผล. ไฟล์เหล่านี้ - 70-usb-log-custom.rules
ควรเป็นตัวเลือกที่ดีสำหรับคุณ ไวยากรณ์ของไฟล์กฎนี้มีความซับซ้อนมาก หากคุณสนใจ Google udev หากไม่เพียงแค่เปิดไฟล์ที่สร้างขึ้นใหม่และแก้ไขเพื่อให้มีลักษณะดังนี้:
# /etc/udev/rules.d/70-usb-log-custom.rules
KERNEL=="sd?1", ATTRS{serial}=="UA04FLGC", ACTION=="add", SYMLINK+="cusb1", RUN+="/home/confus/bin/usb-encrypt.sh add %k"
ENV{ID_FS_USAGE}=="crypto", ACTION=="remove", RUN+="/home/confus/bin/usb-encrypt.sh remove %k"
SUBSYSTEM=="usb", SYSFS{idVendor}=="1781", SYSFS{idProduct}=="0c9f", GROUP="users", MODE="0666"
นี่เป็นไฟล์ udev ที่แท้จริงที่ฉันใช้ มันมีกฎสามข้อในนั้น ทุกบรรทัดเป็นกฎของมันเอง บรรทัดแรกจะเรียกใช้สคริปต์เพื่อสร้างอุปกรณ์ถอดรหัสเมื่อใดก็ตามที่มีการเชื่อมต่อดิสก์ที่เข้ารหัส บรรทัดที่สองจะเรียกใช้สคริปต์เดียวกันโดยมีตัวเลือกต่าง ๆ ในกรณีที่อุปกรณ์ที่ถอดรหัสถูกลบออก บรรทัดที่สามกำหนดสิทธิ์สำหรับอุปกรณ์อื่นที่เกี่ยวข้อง
เป็นไปได้มากว่าคุณจะต้องการบรรทัดแรกเท่านั้น ลบที่เหลือและใส่อนุกรมที่ถูกต้อง (หรือการคำนวณพารามิเตอร์ที่คุณเลือกเพื่อระบุอุปกรณ์ของคุณ)
KERNEL=="sd?1"
กล่าวว่าอุปกรณ์ที่เรากำลังมองหาในกฎนี้ถูกตั้งชื่อตามสายของ/dev/sda1
, /dev/sdc1
หรือสิ่งที่ต้องการ เครื่องหมายนี้เป็นสัญลักษณ์แทนสำหรับจดหมายใด ๆ ATTRS{serial}=="UA04FLGC"
เป็นตัวระบุที่ไม่ซ้ำกันที่นี่ สำหรับอุปกรณ์อื่นฉันกำลังพูดถึง (บรรทัดที่สาม) ฉันไม่ได้ใช้หมายเลขซีเรียล แต่เป็นการรวมกันของSYSFS{idVendor}=="1781"
และSYSFS{idProduct}=="0c9f"
เพื่อระบุ
ACTION=="add"
บอกกฎว่าควรดำเนินการเมื่อมีการเพิ่มอุปกรณ์เท่านั้น ไม่ใช่เมื่อมันถูกลบออก
SYMLINK+="cusb1"
สร้าง symlink /dev/cusb1
ไปยังดิสก์ดังนั้นหนึ่งจะพบว่ามันอยู่ภายใต้
RUN+="/home/confus/bin/usb-encrypt.sh add %k"
เรียกใช้สคริปต์และส่ง 'เพิ่ม' และ '% k' (ชื่ออุปกรณ์) ไปยังสคริปต์
ฉันจะไม่ให้รายละเอียดเพิ่มเติมเนื่องจากมีบทเรียนที่ยอดเยี่ยมเกี่ยวกับกฎของ udev สิ่งที่คุณอ่านที่นี่ควรจะเพียงพอที่จะจ้องมอง