Модем не обнаруживается (Почему я имею к usb_modeswitch?)

В ударе Вы могли сделать что-то вроде этого.

Можно использовать (( )) осуществлять арифметический контекст.

Когда дело доходит до размеров Вы имеете МБ по сравнению с мебибайт, видите диаграмму на правой стороне.

#!/bin/bash

psize()
{
    local name="$1"
    local -i val="$2";
    local u=""

    case "$3" in
    "B") u="B"  ;;
    "K") u="KiB"; ((val /= 1024 ));;
    "G") u="GiB"; ((val /= 1024 * 1024 * 1024 ));;
    # Defaults to MiB
      *) u="MiB"; ((val /= 1024 * 1024 ));;
    esac

    printf "%-22s: %d %s\n" "$name" "$val" "$u"
}

unit=""

# Check if wanted size is given by user
if [[ "$1" =~ ^(B|K|M|G)$ ]]; then
    unit="$1"
fi

# Use tab as delimiter and read into variables "name" and "value"
while IFS=$'\t' read -r name value; do
    case "$name" in
    "innodb_log_file_size"|"innodb_log_buffer_size")
        psize "$name" "$value" "$unit"
        ;;
    esac
done < <(mysql -uroot -ppass -e "SHOW VARIABLES")

С grep

Если Вы хотите смешаться в grep и т.д.:

psize()
{

    local -i a=$(mysql -uroot -ppass -e "SHOW VARIABLES" | \
            grep innodb_log_file_size | cut -f2)
    local -i b=0;
    local u=""

    case "$1" in
    "B") u="B"  ;   b="$a";;
    "K") u="KiB"; ((b = a / 1024 ));;
    "G") u="GiB"; ((b = a / 1024 / 1024 / 1024 ));;
     *)  u="MiB"; ((b = a / 1024 / 1024 ));;
    esac

    printf "Innodb_log_file_size: %d %s\n" "$b" "$u"
}

unit="M"

if [[ "$1" =~ ^(B|K|M|G)$ ]]; then
    unit="$1"
fi

psize "$unit"

Которым Вы могли использовать:

./myscript   # Defaults to MiB
./myscript B # Print in bytes
./myscript G # Print in GiB
...

Поскольку касательно.

Используя awk:

psize()
{
awk -v unit="$1" '
BEGIN {
    if (unit == "")
        unit="M"
    switch (unit) {
    case "B":
        ratio = 1;
        break;
    case "K":
        ratio = 1024;
        break;
    case "G":
        ratio = 1024 * 1024 * 1024;
            break;
    default:
        ratio = 1024 * 1024;
        break;
    }
    if (unit != "B")
        unit = unit "iB"
}
/^innodb_log_file_size\s/ {
    printf("Log size   : %d %s\n", $2 / ratio, unit);
}
/^innodb_log_buffer_size\s/ {
    printf("Buffer size: %d %s\n", $2 / ratio, unit);
}
' <(mysql -uroot -e "SHOW VARIABLES" -ppass)
}

psize "$unit"

6
13.04.2017, 15:36
4 ответа

Наконец-то (в конце концов) я выяснил, что является причиной проблемы с автоматическим переключением usb_mode.

Файл 40-usb_modeswitch.rules в разделе /lib/udev/rules.d содержит:

# Huawei, newer modems
ATTR{idVendor}=="12d1", ATTR{idProduct}=="1446", RUN+="usb_modeswitch '%b/%k'"

Таким образом, мой модем должен быть автоматически usb_modeswitch по 40-usb_modeswitch.rules.

Но проблема в том, что /usr/sbin/usb_modeswitch и /usr/sbin/usb_modeswitch_dispatcher не установили chmod +x (Разрешить выполнить файл). Вероятно, скрипт установки (прикрепленный в вопросе) имел изменённый атрибут.

В то время как вручную sudo usb_modeswitch -I -W -c /etc/usb_modeswitch.d/12d1\:1446 (объясняется в вопросе) I sudo chmod +x /usr/sbin/usb_modeswitch , но /usr/sbin/usb_modeswitch_dispatcher до сих пор не имеют разрешения на выполнение.

Итак, теперь у меня только sudo chmod +x /usr/sbin/usb_modeswitch_dispatcher и я почти закончил!

После этого я удалил весь процесс ручного переключения, указанный в State4 (см. вопрос), и теперь мой модем успешно распознан как:

Bus 001 Device 004: ID 12d1:1436 Huawei Technologies Co., Ltd. E173 3G модем (модем-режим)

Другими словами 40-usb_modeswitch.rules работает нормально.

Наконец я вернулся к State-1. [РЕШЕНА]

1
27.01.2020, 20:28

Пожалуйста, будьте уверены, что в файле конфигурации /etc/usb_modeswitch.conf У вас есть

DisableSwitching=0

, в противном случае автоматический переключение режима отключено глобально.

1
27.01.2020, 20:28

попробуйте правило UDEV, запускайте скрипт каждый раз, когда вы Подключите модем.

ACTION=="add", ATTRS{idVendor}=="XXXX", ATTRS{idProduct}=="UUUU", RUN+="/home/user/script.sh"

Замените XXXX и UUUU с продуктом поставщика и идентификатора, поставьте правило в /etc/udev/rules.d/99-yourrule.rules и перезагрузите или перезагрузите UDEV. Должен работать

4
27.01.2020, 20:28

Я столкнулся с той же проблемой, и принятое решение не помогло мне. Если у вас есть дистрибутив Raspbian, здесь обсуждается известная ошибка: https://github.com/RPi-Distro/repo/issues/47 .

Решение:

  1. редактировать /lib/udev/rules.d/40-usb_modeswitch.rules
  2. редактировать ATTRS {idVendor} == "12d1", ATTR {bInterfaceNumber} = = "00", ATTR {bInterfaceClass} == "08", RUN + = "usb_modeswitch '% b /% k'" , изменив '% b /% k' на "% k" .

Протестировано на Raspbian 8 с Huawei EC315.

0
27.01.2020, 20:28

Теги

Похожие вопросы