ทริกเกอร์การกระทำเมื่อเชื่อมต่อไดรฟ์ข้อมูลที่เฉพาะเจาะจง


10

ฉันมีคีย์ USB ที่มีฐานข้อมูลรหัสผ่าน keepass2 ของฉันและฉันต้องการดำเนินการบางอย่างเมื่อเสียบเข้ากับคอมพิวเตอร์ของฉันคือ:

  • ติดตั้งอัตโนมัติไปยังตำแหน่งเฉพาะ
  • เมื่อทำการติดตั้งเรียบร้อยแล้วให้เรียกใช้ keepass2 บนไฟล์ฐานข้อมูลรหัสผ่าน

งานง่าย ๆ ฉันเดา แต่ฉันหาวิธีทำไม่ได้

ฉันใช้ Ubuntu 12.10 และมันติดตั้งอุปกรณ์โดยอัตโนมัติเป็น "media usb-key" และพยายามที่จะเปิดภาพที่มัน (แม้ว่าจะไม่มี)

อะไรคือวิธีที่ดีที่สุดในการทำเช่นนั้นและเพื่อปิดการติดตั้ง Ubuntu อัตโนมัติ (ดังนั้นจึงไม่ขัดแย้ง)

คำตอบ:


8

เมื่ออุปกรณ์ใหม่ปรากฏขึ้นudevจะได้รับแจ้ง โดยปกติจะสร้างไฟล์อุปกรณ์ภายใต้/devกฎในตัว¹ คุณสามารถแทนที่กฎเหล่านี้เพื่อเปลี่ยนตำแหน่งไฟล์อุปกรณ์หรือเรียกใช้โปรแกรมโดยพลการ นี่คือตัวอย่างกฎ udev เช่น:

KERNEL=="sd*", ATTRS{vendor}=="Yoyodine", ATTRS{serial}=="123456789", NAME="keepass/s%n", RUN+="/usr/local/sbin/keepass-drive-inserted /dev/%k%n"

NAME=สั่งเปลี่ยนแปลงสถานที่ตั้งของแฟ้มอุปกรณ์ที่ผมรวมไว้เพื่อวัตถุประสงค์ภาพประกอบ แต่มันอาจจะไม่เป็นประโยชน์สำหรับกรณีการใช้งานของคุณ ATTRSกฎระบุอุปกรณ์; ทำงานudevinfo -a -n /dev/sdzเมื่อไดรฟ์พร้อมใช้งาน/dev/sdzเพื่อดูว่ามีคุณสมบัติใดอยู่ ระวังว่าคุณสามารถใช้ATTRSกฎจากส่วนเดียวของudevinfoอินพุต (นอกจากนี้คุณสามารถใช้ATTRกฎจากส่วนเริ่มต้น) ดูทำความเข้าใจกับเอาต์พุตของข้อมูล `udevadm -a -n / dev / sdb`สำหรับพื้นหลังเพิ่มเติม กฎนี้เข้าสู่ไฟล์ที่มีลักษณะคล้าย/etc/udev/rules.d/local-storage-keypass.rulesกัน

ใส่คำสั่งที่คุณต้องการเรียกใช้ในสคริปต์ที่กำหนดในRUNคำสั่ง สิ่งที่ต้องการ:

#!/bin/sh
set -e
if [ -d /media/keypass-drive ]; then
  [ "$(df -P /media/keypass-drive | awk 'NR==2 {print $1}')" = "$(df -P /media | awk 'NR==2 {print $1}')" ]
else
  mkdir /media/keypass-drive
fi
mount "$1" /media/keypass-drive
su ereon -c 'keypass2' &

หากคุณมีปัญหาในการเรียกใช้โปรแกรม GUI จากสคริปต์ที่ถูกเรียกจาก udev ให้ดูที่ฉันสามารถเปิดโปรแกรมกราฟิกบนเดสก์ท็อปของผู้ใช้รายอื่นได้หรือไม่

¹ ไม่ได้อยู่ในระบบที่ทันสมัยซึ่ง/devอยู่บน udevtmpfs


1
หมายเหตุสำคัญเกี่ยวกับเรื่องนี้: เมื่อเขียนกฎโดยใช้ข้อมูลจากudevadm info -a -n /dev/sdXคุณจะไม่สามารถจับคู่โดยอิงจากบรรพบุรุษหลาย ๆ คน คุณสามารถจับคู่ตามข้อมูลจากอุปกรณ์และบรรพบุรุษเดียวเท่านั้น สิ่งนี้ถูกกล่าวถึงman 7 udevแต่เป็นความคิดเห็นเล็ก ๆ ที่ถูกมองข้ามได้ง่าย
แพทริค

1

วิธีที่ดีที่สุดในการทำเช่นนี้คือการเขียนกฎ udev ของคุณเองสำหรับอุปกรณ์นี้ น่าเสียดายที่ฉันไม่สามารถให้คำแนะนำเกี่ยวกับวิธีการทำเช่นนี้เพราะฉันไม่เคยทำ ดังนั้นถ้าไม่มีคนอื่นมีคำตอบที่ละเอียดกว่านี้ให้ google หา 'udev rules' แล้วดูใน / lib / udev เพื่อหาตัวอย่าง กฎ udev ที่กำหนดเองของคุณควรอยู่ใน /etc/udev/rules.d


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