В недавно вышедшем Linux Mint 18.2 с рабочим столом Xfce было произведено обновление оконного менеджера Xfwm4, в котором добавлена поддержка вертикальной синхронизации через DRI 3/Present и OpenGL. То есть это решает проблему тиринга уже на аппаратном уровне, однако в LM 18.2 (как и в Ubuntu 16.04) по умолчанию не включён интерфейс DRI 3, потому толку от этого нововведения 0. Так что нужно его включить.
Архив метки: Linux
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
Как пользоваться Linux
В интернете существует множество инструкций, о том как установить Linux на компьютер, как установить его с несколькими другими системами, как настроить определенные аспекты работы, как делать те или иные действия, но нет дельной статьи о том, как пользоваться Linux, какие действия и когда стоит выполнять, зачем это нужно и как все делать правильно.
Мы поговорим о настройке системы, безопасности, обновлениях, журналах, очистке, резервном копировании и других подобных вещах. Я не претендую на звание эксперта в этой области. Я так делаю в своей системе и предлагаю делать вам, но это всего лишь мое мнение, вы и другие пользователи могут считать по-другому. Статья использование linux ориентирована на обычных пользователей, а не системных администраторов и программистов. Но я думаю, что вы можете найти что-то полезное для себя в этой статье.
Читать
🐧 Опасные команды Linux
Операционная система Linux с открытым исходным кодом нарастила обороты со временем, но все таки ее еще нельзя назвать по настоящему популярной.
Многих останавливает проблема обучения Линукс, или просто момент перестройки с привычного Windows.
Так же, работа в “никсах” предполагает различые манипуляции с командной строкой.
Но если вы не используете команды Linux полностью отдавая отчет в своих действиях, вы можете потерять свои данные, или повредить свою ОС
В этой статье я собираюсь предоставить информации о опасных командах, на которые необходимо обратить внимание при использовании Linux. Читать