среда, 25 сентября 2019 г.

FreePBX (памятка 2)

Копируем библиотеку для 3G модема chan_dongle.so.

Создаем файл 92-ttyUSB.rules со следующим содержимым:

# ustanowka praw ttyUSB* dlja asterisk
KERNEL=="ttyUSB*", MODE="0660", OWNER="asterisk", GROUP="dialout"

Создаем файл dongle.conf со следующим содержимым:

[general]

interval=15   ; Number of seconds between trying to connect to devices

;------------------------------ JITTER BUFFER CONFIGURATION --------------------------
;jbenable = yes   ; Enables the use of a jitterbuffer on the receiving side of a
    ; Dongle channel. Defaults to "no". An enabled jitterbuffer will
    ; be used only if the sending side can create and the receiving
    ; side can not accept jitter. The Dongle channel can't accept jitter,
    ; thus an enabled jitterbuffer on the receive Dongle side will always
    ; be used if the sending side can create jitter.

;jbforce = no   ; Forces the use of a jitterbuffer on the receive side of a Dongle
    ; channel. Defaults to "no".

;jbmaxsize = 200  ; Max length of the jitterbuffer in milliseconds.

;jbresyncthreshold = 1000 ; Jump in the frame timestamps over which the jitterbuffer is
    ; resynchronized. Useful to improve the quality of the voice, with
    ; big jumps in/broken timestamps, usually sent from exotic devices
    ; and programs. Defaults to 1000.

;jbimpl = fixed   ; Jitterbuffer implementation, used on the receiving side of a Dongle
    ; channel. Two implementations are currently available - "fixed"
    ; (with size always equals to jbmaxsize) and "adaptive" (with
    ; variable size, actually the new jb of IAX2). Defaults to fixed.

;jbtargetextra = 40  ; This option only affects the jb when 'jbimpl = adaptive' is set.
    ; The option represents the number of milliseconds by which the new jitter buffer
    ; will pad its size. the default is 40, so without modification, the new
    ; jitter buffer will set its size to the jitter value plus 40 milliseconds.
    ; increasing this value may help if your network normally has low jitter,
    ; but occasionally has spikes.

;jblog = no   ; Enables jitterbuffer frame logging. Defaults to "no".
;-----------------------------------------------------------------------------------

[defaults]
; now you can set here any not required device settings as template
;   sure you can overwrite in any [device] section this default values

;context=default   ; context for incoming calls
;context=from-trunk1-cust
context=from-trunk
group=0    ; calling group
rxgain=0   ; increase the incoming volume; may be negative
txgain=0   ; increase the outgoint volume; may be negative
autodeletesms=yes  ; auto delete incoming sms
resetdongle=yes   ; reset dongle during initialization with ATZ command
u2diag=-1   ; set ^U2DIAG parameter on device (0 = disable everything except modem function) ; -1 not use ^U2DIAG command
usecallingpres=yes  ; use the caller ID presentation or not
callingpres=allowed_passed_screen ; set caller ID presentation  by default use default network settings
disablesms=no   ; disable of SMS reading from device when received
    ;  chan_dongle has currently a bug with SMS reception. When a SMS gets in during a
    ;  call chan_dongle might crash. Enable this option to disable sms reception.
    ;  default = no

;language=en   ; set channel default language
language=ru
smsaspdu=yes   ; if 'yes' send SMS in PDU mode, feature implementation incomplete and we strongly recommend say 'yes'
mindtmfgap=45   ; minimal interval from end of previews DTMF from begining of next in ms
mindtmfduration=80  ; minimal DTMF tone duration in ms
mindtmfinterval=200  ; minimal interval between ends of DTMF of same digits in ms

callwaiting=auto  ; if 'yes' allow incoming calls waiting; by default use network settings
    ; if 'no' waiting calls just ignored
disable=no   ; OBSOLETED by initstate: if 'yes' no load this device and just ignore this section

initstate=start   ; specified initial state of device, must be one of 'stop' 'start' 'remote'
    ;   'remove' same as 'disable=yes'

exten=+123456789012  ; exten for start incoming calls, only in case of Subscriber Number not available!, also set to CALLERID(ndid)

dtmf=relax   ; control of incoming DTMF detection, possible values:
    ;   off    - off DTMF tones detection, voice data passed to asterisk unaltered
    ;              use this value for gateways or if not use DTMF for AVR or inside dialplan
    ;   inband - do DTMF tones detection
    ;   relax  - like inband but with relaxdtmf option
    ;  default is 'relax' by compatibility reason

; dongle required settings
[dongle0]
context=from-trunk-Mobile-v180e
audio=/dev/ttyUSB1  ; tty port for audio connection;  no default value
data=/dev/ttyUSB2  ; tty port for AT commands;   no default value

; or you can omit both audio and data together and use imei=123456789012345 and/or imsi=123456789012345
;  imei and imsi must contain exactly 15 digits !
;  imei/imsi discovery is available on Linux only
imei=123456789012345
imsi=123456789012345

; if audio and data set together with imei and/or imsi audio and data has precedence
;   you can use both imei and imsi together in this case exact match by imei and imsi required



редактируем файл extensions_custom.conf:

[from-trunk-Mobile]
exten => _X!,1,Noop(from-pstn-custom,${CALLERID(num)},${CHANNEL(linkedid)})
exten => _X!,n,System(echo ${CHANNEL(linkedid)}_${UNIQUEID}_${EXTEN} > /tmp/tr_${CHANNEL(linkedid)}.txt)
exten => _X!,n,System(echo ${CALLERID(num)} >> /tmp/tr_${CHANNEL(linkedid)}.txt)
exten => _X!,n,Set(__IN_CALLERID=${CALLERID(num)})
exten => _X!,n,Set(__IN_CALLERID=${IF($[${LEN(${IN_CALLERID})}=6]?375162${IN_CALLERID}:${IF($["${IN_CALLERID:0:2}"="80"]?375${IN_CALLERID:2}:${IF($["${IN_CALLERID:0:1}"="8"]?375${IN_CALLERID:1}:${IF($["${IN_CALLERID:0:4}"="+375"]?${IN_CALLERID:1}:${IN_CALLERID})})})})})
exten => _X!,n,Set(CALLERID(num)=${IN_CALLERID})
exten => _X!,n,Set(CALLERID(name)=${CALLERID(num)})
exten => _X!,n,System(echo ${CALLERID(num)} >> /tmp/tr_${CHANNEL(linkedid)}.txt)
exten => _X!,n,Goto(from-trunk,${EXTEN},1)

FreePBX (памятка 1)


extensions_override_freepbx.conf - правки через подключение по ssh или напрямую на сервере FreePBX. Скопировав готовые правила, добавим запуск своих скриптов:
 
[macro-dial-one]
include => macro-dial-one-custom
exten => s,1,Set(DEXTEN=${ARG3})
exten => s,n,Set(__CRM_SOURCE=${CALLERID(num)})
exten => s,n(setexttocall),ExecIf($[${LEN(${EXTTOCALL})}=0 & ${LEN(${DEXTEN})}>0]?Set(__EXTTOCALL=${DEXTEN}))
exten => s,n,Set(DIALSTATUS_CW=)
exten => s,n,GosubIf($["${FROM_DID}"!="" & "${SCREEN}"="" & "${SIGNORE}"="" & "${DB(AMPUSER/${DEXTEN}/screen)}"!=""]?screen,1())
exten => s,n,GosubIf($["${DB(CF/${DEXTEN})}"!=""]?cf,1())
exten => s,n,GotoIf($["${DEXTEN:-1}"="#" | "${DB(DND/${DEXTEN})}"=""]?skip1)
exten => s,n,Set(DEXTEN=)
exten => s,n,Set(DIALSTATUS=BUSY)
exten => s,n(skip1),GotoIf($["${DEXTEN}"=""]?nodial)
exten => s,n,GotoIf($["${DEXTEN:-1}"="#"]?continue)
exten => s,n,Set(EXTHASCW=${IF($["${CWIGNORE}"!=""]? :${DB(CW/${DEXTEN})})})
exten => s,n,GotoIf($["${EXTHASCW}"="" | "${DB(CFB/${DEXTEN})}"!="" | "${DB(CFU/${DEXTEN})}"!=""]?next1:cwinusebusy)
exten => s,n(next1),GotoIf($["${DB(CFU/${DEXTEN})}"!="" & ("${EXTENSION_STATE(${DEXTEN})}"="UNAVAILABLE" | "${EXTENSION_STATE(${DEXTEN})}"="UNKNOWN")]?docfu:skip3)
exten => s,n(docfu),Set(DEXTEN=)
exten => s,n,Set(DIALSTATUS=NOANSWER)
exten => s,n,Goto(nodial)
exten => s,n(skip3),GotoIf($["${EXTHASCW}"="" | "${DB(CFB/${DEXTEN})}"!=""]?next2:continue)
exten => s,n(next2),GotoIf($["${EXTENSION_STATE(${DEXTEN})}"="NOT_INUSE" | "${EXTENSION_STATE(${DEXTEN})}"="UNAVAILABLE" | "${EXTENSION_STATE(${DEXTEN})}"="UNKNOWN"]?continue)
exten => s,n,ExecIf($["${DB(CFB/${DEXTEN})}"!="" & "${CFIGNORE}"=""]?Set(DIALSTATUS=BUSY))
exten => s,n,GotoIf($["${EXTHASCW}"!="" | "${DEXTEN:-1}"="#"]?cwinusebusy)
exten => s,n,Set(DEXTEN=)
exten => s,n,Set(DIALSTATUS=BUSY)
exten => s,n,Goto(nodial)
exten => s,n(cwinusebusy),GotoIf($["${EXTHASCW}"!="" & "${CWINUSEBUSY}"="true"]?next3:continue)
exten => s,n(next3),ExecIf($["${EXTENSION_STATE(${DEXTEN})}"!="UNAVAILABLE" & "${EXTENSION_STATE(${DEXTEN})}"!="NOT_INUSE" & "${EXTENSION_STATE(${DEXTEN})}"!="UNKNOWN"]?Set(DIALSTATUS_CW=BUSY))
exten => s,n(continue),GotoIf($["${DEXTEN}"=""]?nodial)
exten => s,n,GosubIf($["${DEXTEN:-1}"!="#"]?dstring,1():dlocal,1())
exten => s,n,GotoIf($[${LEN(${DSTRING})}=0]?nodial)
exten => s,n,GotoIf($["${DEXTEN:-1}"="#"]?skiptrace)
exten => s,n,GosubIf($[${REGEX("^[\+]?[0-9]+$" ${CALLERID(number)})} = 1]?ctset,1():ctclear,1())
exten => s,n(skiptrace),Set(D_OPTIONS=${IF($["${NODEST}"!="" & ${REGEX("(M[(]auto-blkvm[)])" ${ARG2})} != 1]?${ARG2}M(auto-blkvm):${ARG2}M(my-1^${ARG1}^${CDR(cnam)}^${ARG3}))})
exten => s,n,GosubIf($["${ALERT_INFO}"!="" & "${HASH(SIPHEADERS,Alert-Info)}"=""]?func-set-sipheader,s,1(Alert-Info,${ALERT_INFO}))
exten => s,n,Noop(Blind Transfer: ${BLINDTRANSFER}, Attended Transfer: ${ATTENDEDTRANSFER}, User: ${AMPUSER}, Alert Info: ${ALERT_INFO})
exten => s,n,ExecIf($["${ALERT_INFO}"="" & ${LEN(${AMPUSER})}!=0 & ${LEN(${BLINDTRANSFER})}=0 & ${LEN(${ATTENDEDTRANSFER})}=0]?Set(ALERT_INFO=))
exten => s,n,ExecIf($[${LEN(${BLINDTRANSFER})}!=0]?Set(ALERT_INFO=))
exten => s,n,ExecIf($[${LEN(${ATTENDEDTRANSFER})}!=0]?Set(ALERT_INFO=))
exten => s,n,ExecIf($["${RVOL}"!=""]?Set(ALERT_INFO=${IF($["${ALERT_INFO}"!=""]?${ALERT_INFO}:Normal)}\;volume=${RVOL}))
exten => s,n,ExecIf($["${RVOL}"="" & "${DB(AMPUSER/${EXTTOCALL}/rvolume)}" != ""]?Set(ALERT_INFO=${IF($["${ALERT_INFO}"!=""]?${ALERT_INFO}:Normal)}\;volume=${DB(AMPUSER/${EXTTOCALL}/rvolume)}))
exten => s,n,GosubIf($["${ALERT_INFO}"!="" & "${ALERT_INFO}"!=" "]?func-set-sipheader,s,1(Alert-Info,${ALERT_INFO}))
exten => s,n,ExecIf($[("${MOHCLASS}"!="default") & ("${MOHCLASS}"!="")]?Set(CHANNEL(musicclass)=${MOHCLASS}))
exten => s,n,GosubIf($["${QUEUEWAIT}"!=""]?qwait,1())
exten => s,n,Set(__CWIGNORE=${CWIGNORE})
exten => s,n,Set(__KEEPCID=TRUE)
exten => s,n,GotoIf($["${USEGOTO}"="1"]?usegoto,1)
exten => s,n,GotoIf($["${DB(AMPUSER/${EXTTOCALL}/cidname)}" = "" || "${DB(AMPUSER/${AMPUSER}/cidname)}" = ""]?godial)
exten => s,n,Gosub(sub-presencestate-display,s,1(${EXTTOCALL}))
exten => s,n,Set(CONNECTEDLINE(name,i)=${DB(AMPUSER/${EXTTOCALL}/cidname)}${PRESENCESTATE_DISPLAY})
exten => s,n,Set(CONNECTEDLINE(num)=${EXTTOCALL})
exten => s,n,Set(D_OPTIONS=${D_OPTIONS}I)
exten => s,n(godial),Macro(dialout-one-predial-hook,)
exten => s,n,ExecIf($["${DIRECTION}" = "INBOUND"]?Set(D_OPTIONS=${STRREPLACE(D_OPTIONS,T)}I))
exten => s,n(dialapp),Noop()
exten => s,n,ExecIf($["${ivrreturn}" = "1"]?Set(D_OPTIONS=${D_OPTIONS}g))
exten => s,n(dial),Dial(${DSTRING},${ARG1},${D_OPTIONS}b(func-apply-sipheaders^s^1))
exten => s,n,ExecIf($["${DIALSTATUS}"="ANSWER" & "${CALLER_DEST}"!=""]?MacroExit())
exten => s,n,ExecIf($["${DIALSTATUS_CW}"!=""]?Set(DIALSTATUS=${DIALSTATUS_CW}))
exten => s,n,GosubIf($[("${SCREEN}"!=""&("${DIALSTATUS}"="TORTURE"|"${DIALSTATUS}"="DONTCALL"))|"${DIALSTATUS}"="ANSWER"]?s-${DIALSTATUS},1())
exten => s,n,MacroExit()
exten => s,n(nodial),Noop()
exten => s,n,ExecIf($["${DIALSTATUS}" = ""]?Set(DIALSTATUS=NOANSWER))
exten => s,n,Noop(Returned from dial-one with nothing to call and DIALSTATUS: ${DIALSTATUS})
exten => s,n,MacroExit()
exten => s,n,GotoIf($["${ZULU_RAW_TYPE}"!="Sangomacrm-url"]?crm-save)
exten => s,n,AGI(sangomacrm.agi,true)
exten => s,n,Goto(zulu-event)
exten => s,n(crm-save),AGI(sangomacrm.agi)
 
exten => h,1,Macro(hangupcall,)
 
exten => usegoto,1,Set(USEGOTO=)
exten => usegoto,n,Goto(from-internal,${DSTRING},1)
 
exten => screen,1,GotoIf($["${DB(AMPUSER/${DEXTEN}/screen)}"!="nomemory" | "${CALLERID(number)}"=""]?memory)
exten => screen,n,ExecIf($[${REGEX("^[0-9a-zA-Z ]+$" ${CALLERID(number)})} = 1]?System(rm -f ${ASTVARLIBDIR}/sounds/priv-callerintros/${CALLERID(number)}.*))
exten => screen,n(memory),Set(__SCREEN=${DB(AMPUSER/${DEXTEN}/screen)})
exten => screen,n,Set(__SCREEN_EXTEN=${DEXTEN})
exten => screen,n,Set(ARG2=${ARG2}p)
exten => screen,n,Return()
 
exten => cf,1,Set(CFAMPUSER=${IF($["${AMPUSER}"=""]?${CALLERID(number)}:${AMPUSER})})
exten => cf,n,ExecIf($["${DB(CF/${DEXTEN})}"="${CFAMPUSER}" | "${DB(CF/${DEXTEN})}"="${REALCALLERIDNUM}" | "${CUT(CUT(BLINDTRANSFER,-,1),/,1)}" = "${DB(CF/${DEXTEN})}" | "${DEXTEN}"="${DB(CF/${DEXTEN})}"]?Return())
exten => cf,n,ExecIf($["${DB(AMPUSER/${DEXTEN}/cfringtimer)}" != "0" & "${DB(AMPUSER/${DEXTEN}/cfringtimer)}" != ""]?Set(ARG1=${IF($["${DB(AMPUSER/${DEXTEN}/cfringtimer)}"="-1"]? : ${DB(AMPUSER/${DEXTEN}/cfringtimer)})}))
exten => cf,n,ExecIf($["${DB(AMPUSER/${DEXTEN}/cfringtimer)}" == "0"]?Set(ARG1=${IF($["${DB(FREEPBXCONF/CFRINGTIMERDEFAULT)}"="-1"]? : ${DB(FREEPBXCONF/CFRINGTIMERDEFAULT)})}))
exten => cf,n,Set(DEXTEN=${IF($["${CFIGNORE}"=""]?"${DB(CF/${DEXTEN})}#": )})
exten => cf,n,ExecIf($["${DEXTEN}"!=""]?Return())
exten => cf,n,Set(DIALSTATUS=NOANSWER)
exten => cf,n,Return()
 
exten => qwait,1,ExecIf($["${SAVEDCIDNAME}" = ""]?Set(__SAVEDCIDNAME=${CALLERID(name)}))
exten => qwait,n,Set(ELAPSED=${MATH($[${EPOCH}+30-${QUEUEWAIT}]/60,int)})
exten => qwait,n,Set(CALLERID(name)=M${ELAPSED}:${SAVEDCIDNAME})
exten => qwait,n,Return()
 
exten => ctset,1,Set(DB(CALLTRACE/${DEXTEN})=${CALLERID(number)})
exten => ctset,n,Return()
 
exten => ctclear,1,Noop(Deleting: CALLTRACE/${DEXTEN} ${DB_DELETE(CALLTRACE/${DEXTEN})})
exten => ctclear,n,Return()
 
exten => dstring,1,Set(DSTRING=)
exten => dstring,n,Set(DEVICES=${DB(AMPUSER/${DEXTEN}/device)})
exten => dstring,n,ExecIf($["${DEVICES}"=""]?Return())
exten => dstring,n,ExecIf($["${DEVICES:0:1}"="&"]?Set(DEVICES=${DEVICES:1}))
exten => dstring,n,Set(LOOPCNT=${FIELDQTY(DEVICES,&)})
exten => dstring,n,Set(ITER=1)
exten => dstring,n(begin),Set(THISDIAL=${DB(DEVICE/${CUT(DEVICES,&,${ITER})}/dial)})
exten => dstring,n,GosubIf($["${ASTCHANDAHDI}" = "1"]?zap2dahdi,1())
exten => dstring,n,GotoIf($["${THISDIAL:0:5}"!="PJSIP"]?docheck)
exten => dstring,n,Noop(Debug: Found PJSIP Destination ${THISDIAL})
exten => dstring,n,GotoIf($[ ${REGEX("(/.+/|@)" ${THISDIAL})} = 1 ]?doset)
exten => dstring,n,Noop(Debug: Updating PJSIP Destination with PJSIP_DIAL_CONTACTS)
exten => dstring,n,Set(THISDIAL=${PJSIP_DIAL_CONTACTS(${THISDIAL:6})})
exten => dstring,n,ExecIf($["${THISDIAL}"=""]?Set(DIALSTATUS=CHANUNAVAIL))
exten => dstring,n(docheck),GotoIf($["${THISDIAL}"=""]?skipset)
exten => dstring,n(doset),Set(DSTRING=${DSTRING}${THISDIAL}&)
exten => dstring,n(skipset),Set(ITER=$[${ITER}+1])
exten => dstring,n,GotoIf($[${ITER}<=${LOOPCNT}]?begin)
exten => dstring,n,ExecIf($["${DSTRING:-1}"!="&"]?Return())
exten => dstring,n,Set(DSTRING=${DSTRING:0:$[${LEN(${DSTRING})}-1]})
exten => dstring,n,Return()
 
exten => dlocal,1,Set(DSTRING=${IF($["${ARG1}"=""]?${DEXTEN:0:${MATH(${LEN(${DEXTEN})}-1,int)}}:Local/${DEXTEN:0:${MATH(${LEN(${DEXTEN})}-1,int)}}@from-internal/n)})
exten => dlocal,n,Set(USEGOTO=${IF($["${ARG1}"=""]?1:0)})
exten => dlocal,n,Return()
 
exten => zap2dahdi,1,ExecIf($["${THISDIAL}" = ""]?Return())
exten => zap2dahdi,n,Set(NEWDIAL=)
exten => zap2dahdi,n,Set(LOOPCNT2=${FIELDQTY(THISDIAL,&)})
exten => zap2dahdi,n,Set(ITER2=1)
exten => zap2dahdi,n(begin2),Set(THISPART2=${CUT(THISDIAL,&,${ITER2})})
exten => zap2dahdi,n,ExecIf($["${THISPART2:0:3}" = "ZAP"]?Set(THISPART2=DAHDI${THISPART2:3}))
exten => zap2dahdi,n,Set(NEWDIAL=${NEWDIAL}${THISPART2}&)
exten => zap2dahdi,n,Set(ITER2=$[${ITER2} + 1])
exten => zap2dahdi,n,GotoIf($[${ITER2} <= ${LOOPCNT2}]?begin2)
exten => zap2dahdi,n,Set(THISDIAL=${NEWDIAL:0:$[${LEN(${NEWDIAL})}-1]})
exten => zap2dahdi,n,Return()
 
exten => s-ANSWER,1,Noop(Call successfully answered - Hanging up now)
exten => s-ANSWER,n,GotoIf($["${ivrreturn}" = "1"]?${IVR_CONTEXT},return,1)
exten => s-ANSWER,n(bye),Macro(hangupcall,)
 
exten => s-TORTURE,1,Goto(app-blackhole,musiconhold,1)
exten => s-TORTURE,n,Macro(hangupcall,)
 
exten => s-DONTCALL,1,Answer
exten => s-DONTCALL,n,Wait(1)
exten => s-DONTCALL,n,Zapateller()
exten => s-DONTCALL,n,Playback(ss-noservice)
exten => s-DONTCALL,n,Macro(hangupcall,)
 
exten => s-CHANUNAVAIL,1,Macro(vm,${SCREEN_EXTEN},BUSY,${IVR_RETVM})
exten => s-CHANUNAVAIL,n,GotoIf($["${ivrreturn}" = "1"]?${IVR_CONTEXT},return,1)
exten => s-CHANUNAVAIL,n(return),ExecIf($["${IVR_RETVM}"!="RETURN" | "${IVR_CONTEXT}"=""]?Hangup())
exten => s-CHANUNAVAIL,n,Return()
 
exten => s-NOANSWER,1,Macro(vm,${SCREEN_EXTEN},BUSY,${IVR_RETVM})
exten => s-NOANSWER,n,GotoIf($["${ivrreturn}" = "1"]?${IVR_CONTEXT},return,1)
exten => s-NOANSWER,n(return),ExecIf($["${IVR_RETVM}"!="RETURN" | "${IVR_CONTEXT}"=""]?Hangup())
exten => s-NOANSWER,n,Return()
 
exten => s-BUSY,1,Macro(vm,${SCREEN_EXTEN},BUSY,${IVR_RETVM})
exten => s-BUSY,n,GotoIf($["${ivrreturn}" = "1"]?${IVR_CONTEXT},return,1)
exten => s-BUSY,n(return),ExecIf($["${IVR_RETVM}"!="RETURN" | "${IVR_CONTEXT}"=""]?Hangup())
exten => s-BUSY,n,Return()
 
;--== end of [macro-dial-one] ==--;
 
 
[macro-auto-blkvm]
include => macro-auto-blkvm-custom
exten => s,1,ExecIf($["${FROMQ}" = "true" & "${CALLFILENAME}" != "" & "${CDR(recordingfile)}" = ""]?Set(CDR(recordingfile)=${CALLFILENAME}.${MON_FMT}))
exten => s,n,Set(__MACRO_RESULT=)
exten => s,n,Set(CFIGNORE=)
exten => s,n,Set(MASTER_CHANNEL(CFIGNORE)=)
exten => s,n,Set(FORWARD_CONTEXT=from-internal)
exten => s,n,Set(MASTER_CHANNEL(FORWARD_CONTEXT)=from-internal)
exten => s,n,Macro(blkvm-clr,)
exten => s,n,ExecIf($[!${REGEX("[^0-9]" ${DIALEDPEERNUMBER})} && "${DB(AMPUSER/${AMPUSER}/cidname)}" != ""]?Set(MASTER_CHANNEL(CONNECTEDLINE(num))=${DIALEDPEERNUMBER}))
exten => s,n,ExecIf($[!${REGEX("[^0-9]" ${DIALEDPEERNUMBER})} && "${DB(AMPUSER/${AMPUSER}/cidname)}" != ""]?Set(MASTER_CHANNEL(CONNECTEDLINE(name))=${DB(AMPUSER/${DIALEDPEERNUMBER}/cidname)}))
exten => s,n,Macro(my-2,${DIALEDPEERNUMBER},${CALLINGPRES},${SIPCALLID})
 
;--== end of [macro-auto-blkvm] ==--;
 




extensions_custom.conf - правки через web-интерфейс FreePBX:


[from-trunk-my-custom]
exten => _X!,1,System(echo ${UNIQUEID}_${EXTEN} > /tmp/tr_${UNIQUEID}_${CALLERID(num)}.txt)
exten => _X!,n,System(echo ${CALLERID(num)} >> /tmp/tr_${UNIQUEID}_${CALLERID(num)}.txt)
exten => _X!,n,Set(_IN_CALLERID=${CALLERID(num)})
exten => _X!,n,Goto(from-trunk,${EXTEN},1)
 
[macro-my-1]
exten => s,1,Noop(macro-my-1,${CALLERID(num)},${FROMEXTEN},${TIMESTR},${UNIQUEID})
exten => s,n,Set(StrURL=http://zzz.ttttt.yyy/cgi-bin/test_01?s_=0&n_=1&e_=0&add_=)
exten => s,n,Set(ParamURL=external,${CALLERID(num)},${FROMEXTEN},${STRREPLACE(TIMESTR,"-",",")},${UNIQUEID},macro_my-1)
exten => s,n,System(echo '${StrURL}${ParamURL}' > /tmp/${UNIQUEID}_${CALLERID(num)}_1.txt)
exten => s,n,Set(SSS=${StrURL}${ParamURL})
exten => s,n,System(echo '${SSS}' >> /tmp/${UNIQUEID}_${CALLERID(num)}_1.txt)
exten => s,n,Set(CURLOPT(httptimeout)=3)
exten => s,n,Set(SSS=$[CURL(${SSS})])
exten => s,n,System(echo '${SSS}' >> /tmp/${UNIQUEID}_${CALLERID(num)}_1.txt)
exten => s,n,MacroExit()
 
[macro-my-2]
exten => s,1,Noop(macro-my-2,${CALLERID(num)},${FROMEXTEN},${TIMESTR},${UNIQUEID})
exten => s,n,Set(StrURL=http://zzz.ttttt.yyy/cgi-bin/test_02?s_=0&n_=1&e_=0&add_=)
exten => s,n,Set(ParamURL=external,${CALLERID(num)},${FROMEXTEN},${STRREPLACE(TIMESTR,"-",",")},${UNIQUEID},macro_my-2)
exten => s,n,System(echo '${StrURL}${ParamURL}' > /tmp/${UNIQUEID}_${CALLERID(num)}_2.txt)
exten => s,n,Set(SSS=${StrURL}${ParamURL})
exten => s,n,System(echo '${SSS}' >> /tmp/${UNIQUEID}_${CALLERID(num)}_2.txt)
exten => s,n,Set(CURLOPT(httptimeout)=3)
exten => s,n,Set(SSS=$[CURL(${SSS})])
exten => s,n,System(echo '${SSS}' >> /tmp/${UNIQUEID}_${CALLERID(num)}_2.txt)
exten => s,n,MacroExit()

суббота, 15 июля 2017 г.

Debian 9 + Xfce + TouchPad


apt-get install xserver-xorg-input-synaptics

/usr/share/X11/xorg.conf.d/70-synaptics.conf

/etc/X11/xorg.conf.d/70-synaptics.conf
Section "InputClass"
    Identifier "touchpad catchall"
    Driver "synaptics"
    MatchIsTouchpad "on"
        Option "TapButton1" "1"
        Option "TapButton2" "3"
        Option "TapButton3" "2"
EndSection

пятница, 7 июля 2017 г.

Debian 9 (Stretch) + Realtek usb wi-fi (RTL8187B)

Столкнулся с проблемой на Debian 9 (Stretch) со встроенной в ноутбук беспроводной сетевой картой на чипсете Realtek RTL8187B.
Установка пакета firmware-realtek (дополнительные не свободные прошивки к сетевым картам Realtek) не помогла. Сеть видна, а соединения ни с одной доступной сетью не происходило.

Решение оказалось довольно простым.
Дописать в конфигурационный файл /etc/NetworkManager/NetworkManager.conf строки:

[device]
wifi.scan-rand-mac-address=no

В итоге содержимое файла такое:
[main]
plugins=ifupdown,keyfile
[ifupdown]
managed=false
[device]
wifi.scan-rand-mac-address=no
После перезагрузки системы, связь с сетью устанавливается.

среда, 1 февраля 2017 г.

SIS 771/671 + Debian 8, установка правильного разрешения экрана.

Устанавливал на ноутбук с видеокартой SIS 771/671 ОС Debian8 Jessie (актуально и для Debian 9 Stretch) и столкнулся с проблемой - разрешение экрана не возможно выставить в оригинальном формате, максимум 1024*768.
Решение проблемы было найдено на просторах интернета и оказалось довольно простым.

Запускаем терминал. Повышаем свои права до root-а с помощью su  (или воспользовавшись sudo) запускаем ниже приведенную команду:

nano /etc/X11/xorg.conf

Этим мы создаем конфигурационный файл для X-ов. Заполняем его следующими строчками:

Section "Device"
  Identifier "Generic Video Card"
    VendorName  "Silicon Integrated Systems [SiS]"
        BoardName   "771/671 PCIE VGA Display Adapter"
    Busid "PCI:1:0:0"
    Driver "vesa"
    Screen 0
        Option "UseFBDev" "true"
        Option "DPMS"
        Option "ShadowFB"
        Option "MaxXFBMem"
        VideoRam 262016
        Option "RenderAccel" "true"
        Option "AllowGLXWithComposite" "true"
        Option "backingstore" "true"
        Option "AddARGBGLXVisuals" "True"
EndSection
Section "Monitor"
    Identifier    "Configured Monitor"
    Vendorname    "Generic LCD Display"
    Modelname    "LCD Panel 1280x800"
    HorizSync 20-107
        VertRefresh 50-185
  modeline  "800x600@56" 36.0 800 824 896 1024 600 601 603 625 +hsync +vsync
  modeline  "800x600@60" 40.0 800 840 968 1056 600 601 605 628 +hsync +vsync
  modeline  "1280x768@60" 80.14 1280 1344 1480 1680 768 769 772 795 -hsync +vsync
  modeline  "1280x720@60" 74.48 1280 1336 1472 1664 720 721 724 746 -hsync +vsync
  modeline  "1280x800@60" 83.46 1280 1344 1480 1680 800 801 804 828 -hsync +vsync
    Gamma    1.0
EndSection
Section "Screen"
    Identifier    "Default Screen"
    Monitor        "Configured Monitor"
    Device        "Configured Video Device"
    Defaultdepth    24
    SubSection "Display"
        Depth    24
        Virtual    1280    768
        Modes        "1280x768@60"    "1280x720@60"    "800x600@60"    "1280x800@60"    "800x600@56"
    EndSubSection
EndSection
Section "Module"
    Load "dri"
    Load "dbe" # Double-Buffering Extension
    Load "v4l" # Video for Linux
    Load "extmod"
    Load "type1"
    Load "freetype"
    Load "glx" # 3D layer
    Load "GLcore"
    Load "i2c"
    Load "bitmap"
    Load "ddc"
    Load "int10"
    Load "vbe"
    Load "speedo"
    Load "record"
EndSection
Section "DRI"
        Mode 0666
EndSection

Сохраняем и перезагружаем систему.
Пользуемся.


четверг, 14 июня 2012 г.

Установка Debian 6 на старый ноутбук. Третий этап.

Третий этап. Берем напильник....

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

Yamaha YMF-744 и Debian Squeeze.

По адресу http://wiki.debian.org/snd-ymfpci написано решение проблемы, правда на английском языке. Поэтому я решил написать мини-инструкцию на русском. В некотором смысле грубый перевод, со своими дополнениями и разъяснениями.
Нам необходимо установить звуковую систему "alsa", вместе с ее утилитами и пакет с набором программ для возможности дальнейших действий - создания необходимых файлов:
sudo aptitude install alsa-base alsa-utils build-essential
С помощью следующей команды скачаем необходимый файл, точнее архив с исходными кодами, из интернета:
wget ftp://ftp.alsa-project.org/pub/firmware/alsa-firmware-1.0.25.tar.bz2
Тут у меня появилась проблема - данный адрес, точнее сервер, на момент написания, не был доступен, пришлось искать зеркало. Вот по этому адресу http://mirrors.zerg.biz/alsa/firmware/alsa-firmware-1.0.25.tar.bz2 у меня получилось скачать необходимый файл. В этом случае измените в выше написанной команде адрес.

Небольшое отступление от основной темы. В нашей системе уже есть не только программа для закачки - "wget", но даже интернет браузер - "w3m", программа для работы с архивами - "tar" и много других, которые работают в консоли. Попробуйте ввести вот эту команду:
w3m debian.org
или
w3m alsa-project.org
У вас начнется загружаться страничка по введенному адресу. Как видите, консолью можно пользоваться и не только для ввода одних сплошных команд, а даже просмотреть в интернете нужную информацию. Для выхода  из браузера нажмите клавишу "q" и соответственно подтвердите действие нажав - "y".

Сейчас необходимо извлечь из скачанного архива файлы, для чего вводим:
tar xvf alsa-firmware-1.0.25.tar.bz2
Осталось "исходники" превратить в рабочие данные - модули:
cd alsa-firmware-1.0.25
./configure
cd ymfpci && make
Устанавливаем модули, просто скопировав их в систему:
sudo mkdir -p /usr/local/lib/firmware/yamaha
sudo cp *fw /usr/local/lib/firmware/yamaha
Загружаем их в систему:
sudo modprobe -r snd-ymfpci
sudo modprobe snd-ymfpci
Добавляем свою учетную запись в группу "audio", вместо "user" введите имя своей учетной записи:
sudo adduser user audio
Теперь нам нужно отрегулировать уровни звука, для этого вводим:
alsamixer
Появится псевдографический интерфейс со столбиками. Нас интересуют каналы "Master", "Master M", "Headphone", "PCM". Передвигаемся по ним стрелками влево-вправо, для изменения уровня — стрелки вверх-вниз, еще есть внизу столбика "MM" — означает "mute", т.е. звук выключен, чтобы включить звук — нажмите клавишу "m". Сначала можете отключить "mute" и отрегулировать уровень, например до значения "81", на всех вышеперечисленных каналах. После регулировки, для выхода, жмем клавишу "Esc".
Осталось проверить работоспособность колонок:
aplay /usr/share/sounds/alsa/Noise.wav
speaker-test -tsine -f440 -c2
speaker-test -twav -c2
Для прерывания теста нажмите "Ctrl"+"c".

"Иксы", продолжаем добавлять функционал.

Со звуком разобрались, продолжим добавлять новые "окошки", точнее программы работающие в среде "FluxBox". Чтобы не прыгать из "иксов" в консоль, запустим последнюю, в виде дополнительного приложения, с помощью быстрых клавиш - нажмите сочетание клавиш "Alt"+"F1".
Раз есть простая возможность использовать консоль в "FluxBox", будем загружать "иксы" минуя вход через консоль, с последующим ручным запуском через "startx". Для этого нам нужно установить вспомогательную программу - графический дисплейный менеджер (Display Manager) - вот неоторые из них: GDM (GNOME Display Manger), KDM (KDE Display Manger), XDM (X Display Manger), SLiM (Simple Login Manager). Установим "slim":
sudo apt-get install slim
Чтобы увидеть новый способ входа в систему перезагружаем компьютер.
Если в консоли мы использовали "mc" для обзора дисковой системы (директорий и файлов), то для более привычной работы в "FluxBox" нам нужно будет установить файл-менеджер для "иксов". Конечно, если вам еще интересен "mc" - никто не запрещает им пользоваться. Устанавливаем "PCManFM":
sudo apt-get install pcmanfm
После установки можно запустить его через меню "Приложения"->"Управление файлами"->"PCManFM". Тут нас ожидает мелкая неприятность - отсутствуют иконки файлов и директорий.
И опять в консоль:
nano ~/.gtkrc-2.0
Дописываем строчку:
gtk-icon-theme-name = "nuoveXT2"
Выходим из редактора с сохранением изменений. Запускаем еще раз "PCManFM". Вам, наверно, этот способ запуска программы со временем будет утомителен, поэтому чтобы каждый раз не искать в меню "PCManFM", назначим его вызов через комбинацию клавиш "Win"+"F", где "Win" клавиша с изображением флага "Windows". Откроем файл настроек клавиш в редакторе:
nano ~/.fluxbox/keys
И допишем в конце строчку:
Mod4 F : Exec pcmanfm
Закрываем с сохранением и выбираем в меню "FluxBox" "Reconfigure", а затем - "Restart", чтобы применить изменения. Попробуйте нажать "Win"+"F" - у вас должен запуститься "PCManFM".
К файлам простейший способ доступа у нас появился. Теперь будем добавлять программы для работы с файлами, кстати, во втором этапе мы уже установили "AbiWord" - с помощью которой можно создавать и редактировать текстовые документы. Попробуйте открыть текстовый файл с расширением ".txt" или ".doc" в файловом менеджере. Появится окно с предложением выбрать приложение. Во вкладке "Установленное приложение" выбираем "Офис"->"AbiWord", также можно поставить соответствующую "птичку" для назначения программы по умолчанию для данного типа файла.
Займемся следующими файлами - картинками и фотографиями, т.е. графическими. Сначала установим программу просмотра "GPicView":
sudo apt-get install gpicview
Попробуйте назначить эту программу для файла с картинкой, вышеописанным способом, выбрав во вкладке "Установленное приложение" - "Стандартные"->"Image Viewer". Можно аналогично назначить и остальные графические типы файлов, но у "GPicView" есть свой механизм - нажимаем предпоследний значок ("Настройки") в программе и нажимаем на кнопку "Сделать GPicView просмотрщиком изображений по-умолчанию". Попробуйте теперь открыть графический файл с другим расширением.
Теперь решим вопрос чем открывать файлы архивов:
sudo apt-get install xarchiver
Файлы с текстовой и графической информацией, а также архивы, вы уже можете просматривать. Сейчас поставим программы для работы с интернетом: веб-браузер и почтовый клиент - "Iceape", для работы с ftp-серверами - "FileZilla", для отправки текстовых сообщений - "Pidgin". Запустим установку этих трех программ одной командой:
sudo apt-get install iceape filezilla pidgin


Допишем параметры раскладки клавиатуры в файл ".xsessionrc", для пользователя:
nano ~/.xsessionrc
Следующую строку:
setxkbmap -layout "us,ru" -option "grp:ctrl_shift_toogle, grp_led:scroll"
Этой строчкой устанавливаем два языка (английский и русский), комбинацию клавиш для переключения раскладки — "Ctrl"+"Shift" и индикацию раскладки светодиодом "SсrollLock" на клавиатуре. 
Устанавливаем индикатор переключателя раскладок клавиатуры:
sudo apt-get install fbxkb

Для устранения проблем отображения картинки флага с английской раскладкой делаем следующее (по умолчанию вместо флага картинка с вопросами):
sudo cp /usr/share/fbxkb/images/zz.png /usr/share/fbxkb/images/zz_old.png
sudo cp /usr/share/fbxkb/images/us.png /usr/share/fbxkb/images/zz.png
Еще один штрих, добавляем в автозагрузку. Открываем файл в редакторе:
nano ~/.fluxbox/startup

Перед строчкой содержащей "exec fluxbox", добавляем следующую:
fbxkb &

Выходим из редактора с сохранением.
После перезагрузки "иксов" изменения вступят в силу. Кстати, чтобы завершить работу с "Fluxbox", не обязательно выбирать в меню "Exit", можно нажать следующее сочетание клавиш - "Ctrl"+"Alt"+"Del", что аналогично, т.к. назначено по умолчанию на завершение работы.
Теперь вам будет видно какая раскладка включена, а если используется отдельная клавиатура, то еще будет индикация светодиодом "ScrollLock" на ней.
Так, программ наставили, индикацию раскладок установили, можно пользоваться... Неудобно и долго заходить в меню и запускать программу? Вспомним про файл "keys":
nano ~/.fluxbox/keys
Добавим быстрые клавиши:
Mod4 W : Exec x-www-browser
Mod4 I : Exec pidgin
Mod4 Escape : Exec conky

вторник, 12 июня 2012 г.

Установка Debian 6 на старый ноутбук. Второй этап.

Второй этап. Подготовка к "окошкам".

На прошлом этапе вы установили на ноутбук минимальную систему ОС Debian 6. После загрузки системы пока доступна только консоль, но это уже рабочая система, которую продолжим настраивать для своих нужд. На данном этапе нам потребуется интернет, в отличие от первого, где хватает первого диска системы Debian. Так как производительность ноутбука не высокая будем пытаться использовать менее ресурсоемкие приложения. Приступим.
Вводим имя учетной записи, а в следующем запросе пароль (при вводе пароля на экране не будет отображения каких либо символов).


После успешного входа, система будет ожидать от вас ввода команд. Вы вошли под своей учетной записью в систему. Права вашей учетной записи будут ограничены системой, это как зайти в Windows с учетной записью с правами "Опытный пользователь", многие команды требующие изменений системы вам недоступны. Для этого есть учетная запись root, но так как мы не задавали, при установке системы, пароль для нее — нам стала доступна команда sudo, для временного повышения прав над системой.

Первая программа.

Ну что же, попробуем установить программу "mc" — программа похожа на "Norton Commander" в DOS-е или "FAR" для Windows (ну можно было бы сказать, что она похожя и на "Total Commander", но это консольная утилита). Вводим следующую команду:
sudo apt-get install mc
Для продолжения требуется ввести ваш пароль:

А также подтвердить наши действия введя "y":

Программа установлена, можно ее запустить введя "mc":

Для выхода из "mc" нажмите клавишу "F10".
Итак, с помощью команды "apt-get install mc" мы установили программу, но данные действия требуют привилегий "root", поэтому использовалась команда совместно с "sudo".
Да, если вы при установке системы задали пароль для учетной записи "root" - вам потребуется сначала войти в систему под ней используя команду "su", и ввести пароль. Теперь можете вводить команду "apt-get install mc", заметьте, команду "sudo" уже вводить не надо. Кстати, если вы заметили, у вас поменяется последний символ в приглашении консоли с "$" - означавшего работу под записью пользователя, на значок "#" - который означает работу под записью "root"-а. Чтобы вернутся к своей учетной записи введите "exit". В дальнейшем я буду описывать действия как в первом примере с использованием "sudo".

Сеть и список "источников".

Сейчас мы будем настраивать источники для программ, точнее пакетов с программами. В системе уже установлен простейший текстовый редактор - "nano". Откроем в нем конфигурационный файл sources.list:
sudo nano /etc/apt/sources.list
После строчки начинающейся с "deb cdrom:", добавим следующие:
deb http://ftp.by.debian.org/debian squeeze main contrib non-free
deb-src http://ftp.by.debian.org/debian squeeze main contrib non-free
В примере указан сервер зеркала в Беларусии, для России используйте "ftp.ru.debian.org". Для выхода и сохранения изменений нажимаем сочетание клавиш "Ctrl"+"X", подтверждаем запрос сохранения введя "y", следующее поле, содержит путь и имя файла, не изменяем — просто нажимаем "Ввод":


В этом же файле можно закомментировать строчку начинающейся с "deb cdrom:" - это заставит "забыть" систему о dvd-диске с которого она устанавливалась, просто добавив вначале строки символ "#" ("#" - символ коментария). Сейчас вы немножко освоили редактор nano. Мы еще им будем пользоваться, так что знания пригодятся.
Теперь заставим систему обновить сведения о доступных пакетах, введя следующую команду:
sudo apt-get update
Если у вас появились предупреждения о невозможности скачать пакеты во время выполнения предыдущей команды — у вас, возможно, был неправильно настроен сетевой интерфейс (сетевая карта) во время первого этапа. Проверим настройки, заодно изучив параметры:
sudo nano /etc/network/interfaces
Ищем блок содержащий строчку с "eth0", ниже показан файл с настройками выполненными вручную:

Объясню что означают строки:
allow-hotplug eth0 — включает режим "горячего" подключения, т.е. сетевая карта eth0 автоматически проверяет наличие подключенного сетевого кабеля;
iface eth0 inet static — указывает что сеть настраивается вручную, ее настройки описываются ниже:
address – тут указываем ip адрес;
netmask – указываем сетевую маску;
network – указываем подсеть, этот параметр можно не указывать, он основан на первых двух параметрах, для простого представления как его высчитать: адрес ip 10.2.3.4 и маска 255.0.0.0 – будет 10.0.0.0, грубо говоря, из маски берем нули и заменяем ими соответствующие числа в ip адресе;
broadcast – широковещательный адрес, этот параметр можно не указывать, аналогично предыдущему, с отличием что последнее число должно быть 255, т.о. для вышеописанного примера будет – 10.0.0.255;
gateway – шлюз по умолчанию, адрес на который будут отправляться все "неизвестные" запросы;
dns-nameservers – указываем dns-сервер, может быть как внутренний в вашей сети или внешний из интернета, например вашего провайдера (8.8.8.8 – dns-сервер google).
Вроде более-менее расписал параметры, сейчас проверьте их и подправьте если заметили неточность.

Если у вас в сети есть dhcp сервер раздающий настойки автоматически, то блок должен выглядеть так:
allow-hotplug eth0
iface eth0 inet dhcp
Сохранили изменения? Чтобы изменения произошли в системе, нужно перезагрузить компьютер командой:
sudo reboot
или ввести следующие команды:
sudo /etc/init.d/networking restart
sudo ifup eth0
Попробуйте еще раз обновить список пакетов.

Чтобы посмотреть с каким ip адресом работает ваш компьютер можно ввести команду:
sudo ifconfig
Напротив надписи eth0 будут расписаны все текущие параметры работы сетевого адаптера, кстати, с помощью этой команды вы увидите ip адрес полученыый от dhcp сервера.
Еще есть один момент, возможно у вас в сети настроен и работает прокси-сервер, его тоже можно использовать. Для этого нужно создать файл "apt.conf" и отредактировать его:
sudo nano /etc/apt/apt.conf
И добавить строчки:
Acquire::http::Proxy "http://proxy:port/";
Acquire::ftp::Proxy "ftp://proxy:port/";
Acquire::::Proxy "true";
Вместо "proxy:port" укажите ip адрес прокси сервера и, через двоеточие, его, соответствующий для протокола, порт.
После успешного выполнения обновления списка, система будет иметь доступ к данным находящимся в интернете и соответственно использовать его при установке программ, точнее, их загрузке.

Кстати, для более приятной работы в консоли можете перейти на страничку http://w1tal1j.blogspot.com/2012/06/debian-ttyx.html, где я описал изменение разрешения экрана на 1024*768 пикселей.

Оновляемся...

Теперь произведем обновление нашей системы до актуальной версии, для исправления найденных ошибок в пакетах. Как вы видите, не только система Windows требует обновления, но и в linux ситемах постоянно находят ошибки и их устраняют. Для обновления введите команду:
sudo apt-get upgrade
Система проверит наличие новых версий пакетов и сачает их, после чего сама установит их и попытается настроить в то же состояние, в котором сейчас настроена ваша система.
После обновления системы, перезагружаем компьютер. Напомню команду:
sudo reboot
Теперь вы будете работать в обновленной системе. За ходом появления обновлений, можно следить на основном сайте www.debian.org.
С консолью поигрались... но я думаю вы хотите увидеть на своем компьютере более привычные "окошки", тогда будем настраивать систему дальше.

"Иксы", FluxBox.

Устанавливаем X Window System (в народе просто "иксы"), система которая отвечает за работу тех самых "окошек":
sudo apt-get install xorg
Ну и соответственно как в предыдущей установке - пароль и подтверждение о согласии изменений.
Затем нам потребуется пакет с самими "окошками". Для этого в линукс есть две системы - менеджеры окон (WM, X Window Manager) и окружения рабочего стола (DM, Desktop Environment). К DM относят такие популярные системы как Gnome, KDE, LXDE, но они все для нашего компьютера являются "тяжелыми". Более "легкими" считаются WM, это - OpenBox, FluxBox, IceWM.
Моим выбором стал FluxBox. Приступим к его установке:
sudo apt-get install fluxbox
Можно проверить на работоспособность свежеустановленных пакетов, выполнив команду:
startx
У вас загрузится система xorg с запущенным fluxbox:

Для вызова меню - нажмите правую кнопку мыши. Чтобы выйти - выберите "Exit". На данный момент, при выходе, мы вернемся опять в коносль. Кстати, если нажать в "FluxBox"-е сочетание клавиш "Alt"+"F1" - запустится консоль, только в "окошке".

Aptitude...

В установленной системе кроме команды "apt-get" доступен консольный менеджер пакетов, который можно вызвать командой:
sudo aptitude
Это что-то похожее по функционалу "Установка и удаление программ" в Windows, только с готовым списком доступных к установке программ. Т.е. не обязательно искать программу в интернете на родном сайте, возможно она уже есть в этом списке и от вас потребуется только ее выбрать для установки.
Ниже скриншот с запущенной программой, но в системе еще не было произведено обновление:

Вот небольшое описание работы с программой. А если вы, для начала изучения, решили прочитать статью до конца, то теперь у вас будет выбор способа обновления системы, описаный в следующем абзаце. Кто делал все поэтапно - не растраивайтесь, краткое работы  описание пригодится и в будующем.
Чтобы попасть в меню нажмите "F10". Дальше управляем курсором срелочками. Обратите внимние что в меню большинство команд имеют назначенные "быстрые" клавиши, справа от названия меню. Это для облегчения работы с программой. Чтобы найти, например, установленный ранее нами "mc" выберите в меню "Поиск" или нажмите "/". В появившемся поле введите "mc" и нажмите "Ввод". Нам предложат первое совпадение введенных символов, для продолжения поиска, нажмите "n". Когда найдете "mc", обратите внимание на букву "i" в начале строки (визуально, первый столбец) - это сообщение, что этот пакет уже установлен. А сейчас произведем обновление системы из "aptitude" - нажмите "u", будет попытка соединения с интернетом для обновления списка доступных пакетов (помните, мы использовали для этого команду "apt-get update"). Следующий шаг - "U" (т.е. нажать "Shift"+"u") - это заставит выбрать обновляемые пакеты. Чтобы увидеть выбранные пакеты - нажимаем "g". Еще раз нажав "g" - мы запустим обновление системы (мы использовали для этого команду "apt-get upgrade"). Все действия можно произвести и из меню, выбирая соответствующие меню, но, заметьте, "бысрыми" клавишами удобнее. После обновления вас попросят нажать "Ввод". Затем чтобы выйти из программы, нажмите "q" и, соответственно, на запрос выберите "Yes". Ну и перезагрузите компьютер.

Ставим первую программу для "иксов".

Сейчас, с помощью "aptitude", установим программу для "окошек" - "AbiWord" - графический текстовый редактор, если сравнивать с Windows программой -  похожа на "WordPad". Запускаем "aptitude". Запускаем поиск, в поле вводим "abiword" и жмем "Ввод". На экране будет несколько строчек содержащих искомое слово. Выбираем первое - "abiword", затем нажимаем клавишу "+" ("Shift"+"=" или "+" на цифровой клавиатуре), будут подсвечены несколько строчек. Теперь жмем "g" - система покажет все необходимые для установки пакеты, и следующее нажатие на "g" приведет к запуску установки пакетов и последующей автоматической настройке системы. После установки можете выйти из "aptitude". Теперь в меню "FluxBox"-а можете поискать свежеустановленную программу ("Приложения"->"Офисные"->"AbiWord Word Processor").
Кстати, для просмотра деталей о пакете, в "aptitude", на котором стоит курсор - нажмите "Ввод", вернуться назад, из деталей, нам поможет - "q".

Продолжение следует...

PS. В системе можно установить прокси для консольных утилит с помощью переменных окружения "http_proxy" и "ftp_proxy", для этого изменим файл настроек пользователя ".bashrc":
nano ~/.bashrc
Допишите в конец файла следующие строчки, где "proxy:port" замените на необходимые ip адрес и порт вашего прокси (например 10.0.0.1:8080):
export http_port="http://proxy:port/"
export ftp_proxy="http://proxy:port/"
После чего вам нужно будет выйти и зайти в систему.