Lsusb আউটপুট থেকে বা ডিভাইসের পথে ডিভাইসের ফাইল নাম কীভাবে পাবেন


11

সম্পর্কিত প্রশ্ন: ইউএসবি সংযোগ / সংযোগ বিচ্ছিন্নকরণ বিজ্ঞপ্তি

ডিভাইসটি প্লাগ করা / প্লাগ লাগানো হলে, আমি তাত্ক্ষণিক বিজ্ঞপ্তি পাই, এটি দুর্দান্ত। তবে এটি প্রায় (নিখুঁত) নিখুঁত করতে, আমি ডিভাইসের ফাইলের নামও পেতে চাই /dev/ttyUSB0এবং আরও ভাল এটি এর সাথে সমস্ত প্রতীকও পেতে পারি।

কিন্তু, আমি কিভাবে থেকে এই তথ্য পেতে খুঁজে পাচ্ছি না udev, বা থেকে lsusbএকরকম অন্যথায়, বা। শুধুমাত্র ডিভাইসের আমি আছে আইডির মত একটি ডিভাইস পথ /devices/pci0000:00/0000:00:1d.0/usb5/5-1। এটি থেকে ডিভাইসের ফাইল নাম কীভাবে পাবেন?


1
অধীনে ডিরেক্টরিগুলি ব্রাউজ করুন /dev/disk/, বাই-লেবেল এবং বাই-আইডি পাথগুলি কার্যকর হতে পারে।
লার্নিক্স

ধন্যবাদ, তবে /dev/diskএতে কেবল স্টোরেজ ডিভাইস রয়েছে। বলুন, কিছুই নেই /dev/ttyUSB0
দিমিত্রি ফ্রাঙ্ক

আপনার ব্যবহারের ক্ষেত্রে কী? /dev/ttyUSB0ইত্যাদি সম্পর্কে বিশেষ কী ?
ফাহিম মিঠা

উত্তর:


6

মনে করুন আমি আমার ইউভিসি ক্যামেরার জন্য ডিভাইসটি সন্ধান করার চেষ্টা করছি, lsusb আমাকে দেয়:

Bus 001 Device 004: ID 1e4e:0102 Cubeternet GL-UPC822 UVC WebCam

ডিভাইসের ফাইলের নামটি হ'ল /dev/bus/usb/001/004(প্রথম উপাদানটি বাস আইডি, পরের ডিভাইস আইডি)।


5
এটি কোনও ডিভাইস নোডের মতো পাওয়ার উপায় নয় /dev/ttyUSB0
দিমিত্রি ফ্রাঙ্ক

5

আমি কেবল এটির জন্য একটি স্ক্রিপ্ট তৈরি করেছি, এটি সুন্দর নয় তবে আমার জন্য কাজ করে।

আমি এই কনফিগারেশনের সাহায্যে এই স্ক্রিপ্টটি আর্চ লিনাক্সে পরীক্ষা করেছি:

$ uname -a
Linux 4.4.13-1-lts #1 SMP Wed Jun 8 16:44:31 CEST 2016 x86_64 GNU/Linux

এবং আমার ডিভাইসের নাম /dev/sdbযা আপনার থেকে একেবারেই আলাদা, আমি আশা করি এটি আপনার পক্ষেও কার্যকর হবে।

আরও মনে রাখবেন যে এই স্ক্রিপ্টটি প্রোগ্রামের usbutilsপ্যাকেজের উপর নির্ভর করে usb-devices, আমি বিশ্বাস করি এটি সমস্ত লিনাক্সে ডিফল্টরূপে ইনস্টল করা আছে তবে আমি ভুল হতে পারি।

লিপি usbname:

#!/usr/bin/bash

# Input should be a single line from lsusb output:
DATA=$1

# Read the bus number:
BUS=`echo $DATA | grep -Po 'Bus 0*\K[1-9]+'`

# Read the device number:
DEV=`echo $DATA | grep -Po 'Device 0*\K[1-9]+'`

FOUND=false
USB_Serial=""

# Search for the serial number of the PenDrive:
while read line
do
  if [ $FOUND == true ]; then
    USB_Serial=`echo "$line" | grep -Po 'SerialNumber=\K.*'`
    if [ "$USB_Serial" != "" ]; then
      break;
    fi
  fi

  if [ "`echo "$line" | grep -e "Bus=0*$BUS.*Dev#= *$DEV"`" != "" ]; then
    FOUND=true
  fi
done <<< "$(usb-devices)"

# Get the base name of the block device, e.g.: "sdx"
BASENAME=`file /dev/disk/by-id/* | grep -v 'part' | grep -Po "$USB_Serial.*/\K[^/]+$"`

# Build the full address, e.g.: "/dev/sdx"
NAME="/dev/$BASENAME"

# Output the address:
echo $NAME

ব্যবহার:

$ ./usbname "$(lsusb | grep '<my_usb_label_or_id>')"
/dev/sdb

USB ডিভাইস যদি কোনও ব্লক ডিভাইস না হয় তবে এটি কাজ করবে না।
কাইল ফ্যালকোনার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.