web-dev-qa-db-ja.com

USBマスストレージドライバーを編集する

USB MSDを編集して、デバイス(フラッシュドライブなど)をコンピューターに接続するたびにメッセージを表示します。どうすればいいのですか?正確にどのファイルを編集するのですか?

2
akshay

ドライバはこれとは何の関係もありません。デバイスを管理し、カーネルがデバイスと通信できるようにするだけです。あなたが望むのははるかに高いレバー機能です。

これを行う方法は、Linuxカーネルのデバイスマネージャである udev を使用することです。

  1. 通知を送信するスクリプトを作成します。次の行をホームディレクトリのファイルに保存します(例:~/usbnotify.sh)。

    #!/bin/bash
    export DISPLAY=":0"
    notify-send "New device plugged in: $@"
    

    chmod +x ~/usbnotify.shを実行して、スクリプトを実行可能にします

  2. 以下の内容で/etc/udev/rules.d/95-usbnotify.rulesという新しいファイルを作成します( here から変更):

    KERNEL!="sd[a-z]*", GOTO="media_by_label_auto_mount_end"
    ACTION=="add", PROGRAM!="/sbin/blkid %N", GOTO="media_by_label_auto_mount_end"
    
    # Get label
    PROGRAM=="/sbin/blkid -o value -s LABEL %N", ENV{dir_name}="%c"
    # use basename to correctly handle labels such as ../mnt/foo
    PROGRAM=="/usr/bin/basename '%E{dir_name}'", ENV{dir_name}="%c"
    ENV{dir_name}=="", ENV{dir_name}="usbhd-%k"
    
    ACTION=="add", ENV{dir_name}!="", RUN+="/home/akshay/usbnotify.sh %c", GOTO="media_by_label_auto_mount_end"
    
    # Exit
    LABEL="media_by_label_auto_mount_end"  
    

    必ずスクリプトへの正しいパスを使用してください。私は/home/akshay/usbnotify.shを使用しましたが、ホームディレクトリを指すように編集してください。

スクリプトを保存すればそれだけです。ドライブとしてマウントされている、接続するすべてのデバイスの通知を受け取るはずです。これはおそらくカメラなどでは機能しませんが、/dev/sd*として接続されているストレージデバイスは機能するはずです。

1
terdon