Архив метки: Linux

Как избавиться от тиринга в Linux Mint 18.2 Xfce на свободных видеодрайверах (Обновлено)

В недавно вышедшем Linux Mint 18.2 с рабочим столом Xfce было произведено обновление оконного менеджера Xfwm4, в котором добавлена поддержка вертикальной синхронизации через DRI 3/Present и OpenGL. То есть это решает проблему тиринга уже на аппаратном уровне, однако в LM 18.2 (как и в Ubuntu 16.04) по умолчанию не включён интерфейс DRI 3, потому толку от этого нововведения 0. Так что нужно его включить.

Читать

Bash скрипты Linux

Среди системных администраторов и обычных пользователей Linux достаточно популярна практика писать Bash скрипты для автоматизации и облегчения выполнения определенных задач в операционной системе. Фактически, вы написали один раз порядок действий, которые нужно выполнить, расписали файлы и так далее, а затем просто пишите одну короткую команду и все действия выполняются как нужно. Можно пойти еще дальше и запланировать автоматическое выполнение скрипта.

В этой небольшой статье мы собрали самые полезные Bash скрипты Linux, которые вы можете использовать в своих системах. Некоторые из них состоят из нескольких строк, некоторые помещаются в одну строку. Здесь есть как небольшие сниппеты, которые вы можете использовать в своих скриптах, так и полноценные интерактивные скрипты, для работы с ними через консоль. Читать

Установить профессиональный видеоредактор DaVinci Resolve, в Debian, Ubuntu и производных

Если вы следите за новостями, то знаете, что знаменитый профессиональный видеоредактор и система цветокоррекции DaVinci Resolve, в своей бесплатной редакции, доступен теперь и для Linux. Однако официально разработчиками поддерживаются только CentOS и Red Hat Enterprise Linux, как системы для профессиональных графических станций. Однако это вовсе не означает, что Resolve не будет работать в других дистрибутивах. И в этой заметке я покажу как установить его в Debian, Ubuntu и их производных.

Читать

Asterisk. Соединение абонента с тем же оператором, при обрыве связи

Задача

Имеется небольшой call-центр. Все входящие звонки с разных линий и номеров сначала поступают на сервер Asterisk (FreeBSD+Asterisk 11.14.1), а он в свою очередь распределяет эти звонки между всеми операторами по определенному сценарию (queues).

При звонке, клиент сначала прослушивает голосовое приветствие, потом его сервер соединяет со свободным оператором, и начинается общение. Но часто бывает, что при плохой связи – звонок обрывает. Клиенту приходится заново перезванивать, слушать опять голосовое приветствие (которое порой может длиться до полуминуты), и попадает на оператора… на другого оператора. Приходится заново  рассказывать о своей проблеме другому оператору и решать все по новой. Порой “качество” связи (мобильной) может упасть на столько, что приходится перезванивать по 5-10 раз !!!

Поэтому было решено сделать так, что бы при обрыве, при повторном звонке, от одного и того же клиента – звонок шел без очереди на того же оператора, без голосовых приветсвий и т.д.

Решение

Решение оказалось довольно простым.

Будем использовать существующую базу Asterisk’а – CDRВ этой базе хранятся все записи и входящих и исходящих звонках нашего телефонного сервера.

Открываем файл /etc/asterisk/extensions.conf и правим нужный нам входящий канал. Добавляем такой блок:

 exten => 100,1,MYSQL(Connect connid IP_MYSQL ЛОГИН_MYSQL ПАРОЛЬ_MYSQL БАЗА_MYSQL)

 exten => 100,n,MYSQL(Query resultid ${connid} select dstchannel from cdr where clid like '%${CDR(src)}' and calldate like '${STRF TIME(${EPOCH},,%Y-%m-%d %H)}%')

 exten => 100,n,MYSQL(Fetch fetchid ${resultid} operator)

 exten => 100,n,GotoIf($["${operator}" = ""]?8:5)

 exten => 100,n,MYSQL(Clear ${resultid})

 exten => 100,n,MYSQL(Disconnect ${connid})

 exten => 100,n,Dial(SIP/${operator:-12:3},20,tT)

 exten => 100,n,Background(hello)

 exten => 100,n,Queue(support)

Что мы делаем

При входящем звонке, соединяемся с базой, делаем запрос, на поиск в таблице cdr в поле clid  по номеру водящего звонка (переменная %${CDR(src)} ) и время укажем последний текущий час (переменная ${STRF TIME(${EPOCH},,%Y-%m-%d %H)}%) в поле calldate.  Если звонок “новый” и еще не звонил в течении часа, то запрос вернет пустое значение в переменную operator, и звонок перекинется на проигрывание приветствия, и звонок поступит в очередь операторов, где на него ответит свободный оператор.

Пример cmd asterisk:

 -- Executing [100@local-phones:1] MYSQL("SIP/INPUT_MTS-0000006c", "Connect connid localhost aster password asterisk") in new stack

 -- Executing [100@local-phones:2] MYSQL("SIP/INPUT_MTS-0000006c", "Query resultid 3 select dstchannel from cdr where clid like '%099xxxxxxx' and calldate like '2017-09-06 09%'") in new stack

 -- Executing [100@local-phones:3] MYSQL("SIP/INPUT_MTS-0000006c", "Fetch fetchid 4 operator") in new stack

 -- Executing [100@local-phones:4] GotoIf("SIP/INPUT_MTS-0000006c", "1?8:5") in new stack

 -- Goto (local-phones,100,8)

 -- Executing [100@local-phones:8] BackGround("SIP/INPUT_MTS-0000006c", "hello") in new stack

 -- <INPUT_MTS-0000006c> Playing 'hello.slin' (language 'ru')

 -- Executing [100@local-phones:9] Queue("SIP/INPUT_MTS-0000006c", "support") in new stack

 -- Started music on hold, class 'default', on SIP/INPUT_MTS-0000006c

 == Using SIP RTP CoS mark 5

 -- SIP/971-0000006d is ringing

 -- SIP/971-0000006d answered SIP/INPUT_MTS-0000006c

 -- Stopped music on hold on SIP/INPUT_MTS-0000006c


Если же, клиент уже звонил и в базе cdr уже существует запись о том, что он звонил. Тогда в переменную operator вернется значение – SIP- номер оператора, с кем он разговаривал, и звонок уже вне очереди поступит напрямую к тому же оператору.

 -- Executing [100@local-phones:1] MYSQL("SIP/INPUT_MTS-0000006a", "Connect connid localhost aster password asterisk") in new stack

 -- Executing [100@local-phones:2] MYSQL("SIP/INPUT_MTS-0000006a", "Query resultid 1 select dstchannel from cdr where clid like '%099xxxxxxx' and calldate like '2017-09-06 09%'") in new stack 

 -- Executing [100@local-phones:3] MYSQL("SIP/INPUT_MTS-0000006a", "Fetch fetchid 2 operator") in new stack

 -- Executing [100@local-phones:4] GotoIf("SIP/INPUT_MTS-0000006a", "0?8:5") in new stack

 -- Goto (local-phones,100,5)

 -- Executing [100@local-phones:5] MYSQL("SIP/INPUT_MTS-0000006a", "Clear 2") in new stack

 -- Executing [100@local-phones:6] MYSQL("SIP/INPUT_MTS-0000006a", "Disconnect 1") in new stack

 -- Executing [100@local-phones:7] Dial("SIP/INPUT_MTS-0000006a", "SIP/971,20,tT") in new stack



2017-09-06T10:41:35
Asterisk

Как пользоваться Linux

В интернете существует множество инструкций, о том как установить Linux на компьютер, как установить его с несколькими другими системами, как настроить определенные аспекты работы, как делать те или иные действия, но нет дельной статьи о том, как пользоваться Linux, какие действия и когда стоит выполнять, зачем это нужно и как все делать правильно.

Мы поговорим о настройке системы, безопасности, обновлениях, журналах, очистке, резервном копировании и других подобных вещах. Я не претендую на звание эксперта в этой области. Я так делаю в своей системе и предлагаю делать вам, но это всего лишь мое мнение, вы и другие пользователи могут считать по-другому. Статья использование linux ориентирована на обычных пользователей, а не системных администраторов и программистов. Но я думаю, что вы можете найти что-то полезное для себя в этой статье.

Читать

🐧 Опасные команды Linux

Операционная система Linux  с открытым исходным кодом нарастила обороты со временем, но все таки ее еще нельзя назвать по настоящему популярной.

Многих останавливает проблема обучения Линукс, или просто момент перестройки с привычного Windows.

Так же, работа в “никсах” предполагает различые манипуляции с командной строкой.

Но если вы не используете команды Linux полностью отдавая отчет в своих действиях, вы можете потерять свои данные, или повредить свою ОС

В этой статье я собираюсь предоставить информации о опасных командах, на которые необходимо обратить внимание при использовании Linux. Читать