আমি কীভাবে কোনও স্ক্রিপ্ট ব্যবহার করে কোনও ইউএসবি ডিভাইস পুনরায় সেট করব?


11

আমার কাছে একটি ইউএসবি জিএসএম মডেম রয়েছে যা কাজের সম্পত্তিকে অলভ্যাস করে না (Huawei E367u-2) কখনও কখনও এটি রিসেট হয় (লগগুলিতে ইউএসবি ডিভাইস সংযোগ বিচ্ছিন্ন / পুনরায় সংযোগ) এবং যখন এটি ফিরে আসে তখন এর বিভিন্ন টিটিআইএসবি নম্বর থাকে। কখনও কখনও বুটে, USB_modswitch মনে হয় কেবল বরখাস্ত হয় নি। কম্পিউটারটি একটি রাস্পবেরি পাই চলমান রাস্পবিয়ান।

আমার এটির একটি সহজ সমাধান রয়েছে, প্রতি মিনিটে সিআরএন নিম্নলিখিত স্ক্রিপ্টটি চালায়:

If WVDIAL is not running:
    Run WVDIAL

আমি এটি হতে স্ক্রিপ্টটি পরিবর্তন করতে চাই:

If /dev/ttyUSB0 is not present:
    If DevicePresent(12d1:1446):
        ResetDevice(12d1:1446)
    ElseIs DevicePresemt(12d1:1506)
        ResetUSB(12d1:1506)
If WVDIAL is not running:
    Run WVDIAL

স্পষ্টতই এটি ছদ্ম কোড, তবে আমার নীচের লাইনগুলি রয়েছে যেগুলি আমাকে এক সাথে স্ট্রিং করতে হবে তবে আমি কীভাবে বুঝতে পারি না:

এটি চালিত না হলে wvdial লোড করে:

#! /bin/sh 
# /etc/init.d/wvdial

### BEGIN INIT INFO
# Provides:          TheInternet
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Simple script to start a program at boot
# Description:       A simple script from www.stuffaboutcode.com which will start / stop a program a boot / shutdown.
### END INIT INFO

# If you want a command to always run, put it here

# Carry out specific functions when asked to by the system
case "$1" in
  start)
    echo "Starting GPRS Internet"
    # run application you want to start
    /sbin/start-stop-daemon --start --background --quiet --exec /usr/bin/wvdial internet
    ;;
  stop)
    echo "Stopping GPRS Internet"
    # kill application you want to stop
    /sbin/start-stop-daemon --stop --exec /usr/bin/wvdial 
    ;;
  *)
    echo "Usage: /etc/init.d/noip {start|stop}"
    exit 1
    ;;
esac

exit 0

এটি আমাকে /sysএকটি নির্দিষ্ট ডিভাইসের পথ খুঁজে পেতে দেয় :

for X in /sys/bus/usb/devices/*; do
    echo "$X"
    cat "$X/idVendor" 2>/dev/null
    cat "$X/idProduct" 2>/dev/null
    echo
done

আপনি যদি সঠিক / সিস্টেমে পাথ জানেন তবে এটি একটি ইউএসবি ডিভাইস পুনরায় সেট করে:

echo 0 > /sys/bus/usb/devices/1-1.2.1.1/authorized
echo 1 > /sys/bus/usb/devices/1-1.2.1.1/authorized

সুতরাং, /dev/ttyUSB0"আমাকে যদি সর্বদা চালানোর জন্য কোনও আদেশ চান তবে এটি এখানে রাখুন" বিভাগের অধীনে সর্বশেষ 2 বিভাগ এবং একটি পরীক্ষাটি এমন একটি বিভাগে স্ট্রিং করা দরকার যা "

আপডেট 1

usbreset, যদিও কাজ করছে, কাজটি করে না। কেবলমাত্র 1 এ 1 প্রতিধ্বনি authroizedসঠিকভাবে কোনও ডিভাইস সংযোগ বিচ্ছিন্ন / পুনরায় সংযোগের অনুকরণ করে।
এটি ডিভাইসটি বুট করার কৌশল বা ইউএসবি_মোডসইচকে জীবনে ফিরিয়ে দেয় trick যেমন আমি একসাথে আবদ্ধ করতে পরিচালিত করেছি:

echo "Searching for $1"
devPath=`lsusb | grep $1 | sed -r 's/Bus ([0-9]{3}) Device ([0-9]{3}).*/bus\/usb\/\1\/\2/g;'`
echo "Found $1 @ $devPath"
echo "Searching for sysPath"
for sysPath in /sys/bus/usb/devices/*; do
    echo "$sysPath/uevent"
    devName=`cat "$sysPath/uevent" | grep $devPath`
    #echo devName=$devName
    if [ ! -z $devName ] 
    then
        break
    fi
done
if [ ! -z  $devName ] 
then
    echo "Found $1 @ $sysPath, Resetting"
    echo "echo 0 > $sysPath/authorized"
    echo 0 > $sysPath/authorized
    echo "echo 1 > $sysPath/authorized"
    echo 1 > $sysPath/authorized
else
    echo "Could not find $1"
fi

আমি মনে করি অতএব আমাকে এখন যা করতে হবে তা এটি init.d স্ক্রিপ্টে রেখে দেওয়া হয়েছে:

if ttyUSB0 not present
    if 12d1:1446 present
        /usr/sbin/resetdevicebyauthorized 12d1:1446
    else if 12d1:1506 present
        /usr/sbin/resetdevicebyauthorized 12d1:1506
    fi
fi

1
usbresetহুয়াওয়ে মডেমগুলির সাথে +1 ব্যর্থ হয়, মডেমটি পুনরুদ্ধার করতে সক্ষম হয় না এবং রিবুটটিতে হিমশীতল হয়। আমি বর্তমানে একই সমস্যাটি সমাধান করছি এবং খুব শীঘ্রই একটি সম্পূর্ণ কার্যক্ষম সমাধান হতে পারে।
yo '

আমি জানি আপনি যা শুনতে চান তা নয়, তবে আমি যে লাঠিটি ব্যবহার করছিলাম তার পরে এই সমস্যাটি নিজেই ভাজা হয়ে গেল, আমি টেসকো (10 ডলার) এর জন্য একটি হুয়াওয়ে ই 3131 তুলেছি। এটি একটি স্টিকের একটি রাউটার, আপনি কেবল এটি প্লাগ ইন করুন এবং আপনি NAT'd আইপি দিয়ে E1 পাবেন এবং আপনার কাজ শেষ। এমনকি এটির কনফিগারেশনের জন্য একটি ওয়েব ইন্টারফেস রয়েছে। আপনার যদি প্রয়োজন হয় তবে এটি পিপিএল মোডে ফ্লিপ করা যেতে পারে। @ তোহেজ
রোবজে 1 এম

ঠিক আছে, 4G আছে কিনা আমাকে বলুন এত সস্তা, এবং আপনি আমার নায়ক! :) (আমি 4 জি ট্যারিফ ও 3G মডেম বর্তমানে আছি, হাঁ, এবং একটি 4 জি মডেম যে হয়েছে কোন এআরএম ড্রাইভার যান।)
ইয়ো '


পরীক্ষা করে দেখুন এই সংশ্লিষ্ট প্রশ্ন ইউনিক্স ও লিনাক্স দঃপূঃ উপর।
দিমিত্রি গ্রিগরিয়েভ

উত্তর:


2

নির্দিষ্ট ইউএসবি ডিভাইসটি রিসেট করার জন্য আমি একটি সাধারণ বাশ স্ক্রিপ্ট তৈরি করেছি।

#!/bin/bash
#type lsusb to find "vendor" and "product" ID in terminal
 set -euo pipefail
 IFS=$'\n\t'

        #edit the below tow lines of vendor and product values using lsusb result
        dev=$(lsusb -t | grep usbdevicename | grep 'If 1' | cut -d' ' -f13|cut -d"," -f1)
        #VENDOR=05a3
        #PRODUCT=9230
        VENDOR=$(lsusb -s $dev | cut -d' ' -f6 | cut -d: -f1)
        PRODUCT=$(lsusb -s $dev | cut -d' ' -f6 | cut -d: -f2)

        for DIR in $(find /sys/bus/usb/devices/ -maxdepth 1 -type l); do
          if [[ -f $DIR/idVendor && -f $DIR/idProduct &&
                $(cat $DIR/idVendor) == $VENDOR && $(cat $DIR/idProduct) == $PRODUCT ]]; then
            echo 0 > $DIR/authorized
            sleep 0.5
            echo 1 > $DIR/authorized
          fi
        done

9

আপনি এই সি প্রোগ্রামের মাধ্যমে ইউএসবি বাস পুনরায় সেট করতে পারেন। https://gist.github.com/x2q/5124616

গিথুব থেকে সি কোড ডাউনলোড করুন

wget -c --no-check-certificate https://gist.githubusercontent.com/x2q/5124616/raw/3f6e5f144efab2bc8e9d02b95b8301e1e0eab669/usbreset.c -O usbreset.c

সি কোড ইউড্রেসেট হিসাবে সংকলন করুন

cc usbreset.c -o usbreset

প্রোগ্রাম কার্যকর করার অনুমতি দিন

chmod +x usbreset

Lsusb কমান্ডের মাধ্যমে আপনার ইউএসবি ডিভাইসগুলি তালিকাভুক্ত করুন

lsusb

আপনার আউটপুটে ইউএসবি ডিভাইস এন্ট্রিগুলি দেখতে হবে এবং আপনি যে ডিভাইসটি পুনরায় সেট করতে চান তা চেক করা উচিত।

বাস 002 ডিভাইস 003 : আইডি 0fe9: 9010 ডিভিকো

যুক্তি দিয়ে usbreset প্রোগ্রাম চালান

sudo ./usbreset /dev/bus/usb/002/003

এখনও এটিকে স্ক্রিপ্টে একসাথে রাখা দরকার। ভালো কিছু: x = lsusb | grep xxxx:yyyy /usr/sbin/usbreset $x। দুঃখজনকভাবে এটি উপস্থিত হয় আমরা কোনও মন্তব্যে লাইন ব্রেক রাখতে পারি না
RoboJ1M

আমার এটি আমার init.d স্ক্রিপ্টে ( wvdialer) এ দরকার। বর্তমানে সিআরএন এটি প্রতি মিনিটে চালায় এবং এটি উপস্থিত না থাকলে (ব্যবহার করে start-stop-daemon) ডাব্লুভিডিয়াল পুনরায় লোড করে । TtyUSB0 না থাকলে এটি শুরু হবে না। এখন বিভিন্ন কারণে লাঠিটির মাঝে মাঝে প্রাণবন্তভাবে লাথি মারা দরকার হয়। সুতরাং সেই স্ক্রিপ্টে আমার দরকারIf ttyUSB0 is not present reset the USB stick
RoboJ1M

1
আরও তথ্য পেতে lsusb কমান্ড ব্যবহার করবেন? উদাহরণ; lsusb -d xxxx: yyy তারপর আপনার ইউএসবি মডেমটি যদি সেখানে ইউএসব্রেট না বলে তা পরীক্ষা করে দেখুন।
gurkanozturk

2

আপনি একটি ডিভাইস পুনরায় সেট করতে পাইসব ব্যবহার করতে পারেন:

প্রথমে পাইসব ইনস্টল করুন:

sudo pip install pyusb

তারপরে এই স্ক্রিপ্টটি তৈরি করুন এবং এটি চালান:

#!/usr/bin/python
from usb.core import find as finddev
dev = finddev(idVendor=0x1234, idProduct=0x5678)
dev.reset()

আপনি যে ডিভাইসটি পুনরায় সেট করতে চান তাতে idVendorএবং idProductযে ডিভাইসটি পুনরায় সেট করতে চান তা মানিয়ে নিন (এর মাধ্যমে আপনি আইডিটি সন্ধান করতে পারবেন lsusb)


0

তোমাকে অনেক ধন্যবাদ! এই সি কোডটি দুর্দান্ত কাজ করে। এটি ইউএসবি ডিভাইস সনাক্ত করার জন্য আমি করা সহজ শেল স্ক্রিপ্ট

#!/bin/bash
USBNAME=webcam
LSUSB=$(lsusb | grep --ignore-case $USBNAME)
FOLD="/dev/bus/usb/"$(echo $LSUSB | cut --delimiter=' ' --fields='2')"/"$(echo $LSUSB | cut --delimiter=' ' --fields='4' | tr --delete ":")
echo $LSUSB
echo $FOLD
sudo ./usbreset $FOLD

0

আমার হুয়াওয়ে মডেম পুনরায় সেট করা সবসময় কাজ করে না। যেহেতু আমি যাইহোক সিস্টেমেড পরিষেবাদির সাথে ডায়াল করছি তাই আমি কয়েকটি লাইন যুক্ত করেছি যা সমস্ত ইউএসবি ডিভাইসকে পুরোপুরি শক্তিহীন করে এবং 5 মিনিটের পরে রাস্পবেরিটিকে রিবুট করে :-)

[Unit]
Description=GSM Internet
Requires=network.target
# If unable to start within 12hrs, unpower all USB and reboot
StartLimitIntervalSec=43200
StartLimitBurst=300
OnFailure=unpower-usb-reboot.service

[Service]
Type=forking
User=root
ExecStartPre=/bin/ls /dev/serial/by-id/usb-HUAWEI_Technology_HUAWEI_Mobile-if00-port0
ExecStart=/usr/bin/pon
RemainAfterExit=yes
ExecStop=/usr/bin/poff
Restart=always
RestartSec=120

[Install]
WantedBy=multi-user.target
[Unit]
Description=Unpowers all USB and reboots
[Service]
User=root
ExecStart=/bin/sh -c 'echo 0 > /sys/devices/platform/soc/20980000.usb/buspower; sleep 5m; shutdown -r now'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.