Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Помощь в написании скрипта для включения/отключения клавиатуры  (Прочитано 950 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн BinaryCQ

  • Автор темы
  • Новичок
  • *
  • Сообщений: 7
    • Просмотр профиля
Здравствуйте, формучане. Написал скриптики отключения и включения клавиатуры на ноуте, но никак не могу обьеденить две команды в одном скрипте. Хочу получить что то в виде

#!/bin/bash
if
 xinput --list-props 14 - Device Enabled (145):   1
  then
   xinput --set-prop 14 145 0
   kdialog --passivepopup Клавиатура_Заблокирована 2
  else
   xinput --set-prop 14 145 1
kdialog --passivepopup Клавиатура_Снова_Работает 2

exit 0
fi

Проблема в условии не погу понять как правильно написать.
« Последнее редактирование: 17 Мая 2019, 12:03:33 от BinaryCQ »

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Re: Помощь в написании скрипта
« Ответ #1 : 17 Мая 2019, 01:20:27 »
Цитировать
как правильно написать
Читай:
https://www.opennet.ru/docs/RUS/bash_scripting_guide/

Оффлайн zg_nico

  • Заслуженный пользователь
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3512
  • Nil mortalibus arduum est
    • Просмотр профиля
Re: Помощь в написании скрипта
« Ответ #2 : 17 Мая 2019, 01:43:06 »
Проблема в условии не погу понять как правильно написать
BinaryCQ, если я правильно сам интерпретирую Ваш вопрос, то можно примерно так Ваше текущее условие расписать:
Код: (bash) [Выделить]
#!/bin/bash
#получаем состояние устройства строкой:
devString=$(xinput --list-props 14 | grep "Device Enabled")
#парсируем строку в массив:
SAVEIFS=$IFS; IFS=":"; devString=($devString); IFS=$SAVEIFS
#смотрим значение второго (счёт с нуля!) элемента полученного массива:
if (( ${devString[1]} == 1 )); then
        xinput --set-prop 14 145 0
        kdialog --passivepopup Клавиатура_Заблокирована 2
    else
        xinput --set-prop 14 145 1
        kdialog --passivepopup Клавиатура_Снова_Работает 2
fi
exit 0
Thunderobot G150-D2: Intel SkyLake Core i7-6700HQ 2.60GHz, 8Gb DDR4 2133 MHz, Intel HD530, NVidia GeForce GTX 960M 2Gb.  Ubuntu 16.04 64x [Unity], KUbuntu 18.04 64x.

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Помощь в написании скрипта
« Ответ #3 : 17 Мая 2019, 08:40:42 »
  • Если Вы отключите клавиатуру - чем будете включать?
  • Почему не использовать xinput enabled|disabled <device>?
  • Вот это #парсируем строку в массив: - совсем не линукс-way...
Код: (bash) [Выделить]
if xinput --list-props 14 | grep -qm 1 "Device Enabled.*:\s*1$"; then
« Последнее редактирование: 17 Мая 2019, 08:55:06 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн BinaryCQ

  • Автор темы
  • Новичок
  • *
  • Сообщений: 7
    • Просмотр профиля
Re: Помощь в написании скрипта
« Ответ #4 : 17 Мая 2019, 11:38:40 »
Читай:
https://www.opennet.ru/docs/RUS/bash_scripting_guide/
Спасибо за ссылку, обязательно ознакомлюсь, к сожалению времени на изучение маловато =(
если я правильно сам интерпретирую Ваш вопрос, то можно примерно так Ваше текущее условие расписать:
Спасибо за ответ, но думаю слишком сложный код для такого простого условия. Мне нужно что бы скрипт проверил значение Device Enabled (145) и на его основании выполнил команду.
Если Вы отключите клавиатуру - чем будете включать?
На данный момент в наличии два скрипта - первый отключает клавиатуру(xinput --set-prop 14 145 0), второй ее включает(xinput --set-prop 14 145 1) Мышка в этом случае продолжает работать и включить клаву можно с ярлыка.
Почему не использовать xinput enabled|disabled <device>?
можно и так,наверное, спасибо за наводку, обязательно попробую.
Опять же всё упрется в условие, вывод сообщения о выполненной команде.
Код: Bash

    if xinput --list-props 14 | grep -qm 1 "Device Enabled.*:\s*1$"; then
Вечером отпишусь о результатах.

Извиняюсь за может быть глупые вопросы, я с линуксом познакомился всего неделю назад, а программирование знаю только по курсу информатики =)

Нашел на забугорном форуме, так же отпишусь о результатах.

#!/bin/bash

device=14
state=$(xinput list-props "$device" | grep "Device Enabled" | grep -o "[01]$")

if [ $state == '1' ];then
  xinput --disable "$device"
else
  xinput --enable "$device"
fi
« Последнее редактирование: 17 Мая 2019, 12:14:03 от BinaryCQ »

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
state=$(xinput list-props "$device" | grep "Device Enabled" | grep -o "[01]$")

if [ $state == '1' ];then
имел бы право на жизнь, не будь таким корявым
Код: (bash) [Выделить]
state=$(xinput list-props "$device" | grep "Device Enabled")
if ((${state##*:})) ; then
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн andytux

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 7966
    • Просмотр профиля
Если это правильно:
Цитировать
state=$(xinput list-props "$device" | grep "Device Enabled" | grep -o "[01]$")
if [ $state == '1' ];then
  xinput --disable "$device"
else
  xinput --enable "$device"
fi
то должно сработать это:
case $(xinput list-props "$device" | grep "Device Enabled" | grep -o "[01]$") in
  1) xinput --disable "$device";;
  *) xinput --enable "$device";;
esac

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
andytux, case - это гут!
Код: (bash) [Выделить]
case $(xinput list-props "$device" | grep "Device Enabled") in
  *1) xinput --disable "$device";;
   *) xinput --enable "$device" ;;
esac
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Я бы так сделал:
(Нажмите, чтобы показать/скрыть)

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
ReNzRv,
Код: (bash) [Выделить]
if xinput --list-props 14 | grep -qm 1 "Device Enabled.*:\s*1$"; then
* "Все украдено до нас!"
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн BinaryCQ

  • Автор темы
  • Новичок
  • *
  • Сообщений: 7
    • Просмотр профиля
Всем спасибо за помощь! Остановился на варианте:
#!/bin/bash

device=14
 state=$(xinput list-props "$device" | grep "Device Enabled")
    if ((${state##*:})) ; then
  xinput --disable "$device"
  kdialog --passivepopup Клавиатура_Заблокирована 3
else
  xinput --enable "$device"
  kdialog --passivepopup Клавиатура_Разблокирована 3
fi

exit 0

Остальные тоже работают, кроме варианта с Case - нет реакции на запуск.

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Azure,
Нет, только позаимствованно  ;D

 

Страница сгенерирована за 0.019 секунд. Запросов: 20.