Categories
Handsets Software

Sangoma Connect Mobile

We know that right now, communication is key. We also know that you need to be able to work where it makes the most sense for you, so mobility is a must. The latest milestone in our mission to help you communicate more effectively is the next-generation mobile softphone app for FreePBX and PBXact. It’s called Sangoma Connect Mobile, and it is now available to download!

Sangoma Connect Mobile combines the best of our existing solutions with new core mobile technologies to provide a greater communication experience for calling and collaborating with coworkers.

Sangoma Connect Mobile provides rich voice and video calling for PBXact and FreePBX, on iOS and Android devices. We’ve made the onboarding experience very simple for system administrators to provision, and for users to install:

  • Administrators: enable Connect users via the User Manager within the PBXact or FreePBX admin interface. That automatically sends an invitation email message to each user.
  • Users: open their invitation email and follow simple instructions to download the app from the app store, then click a ‘magic log-in link’ in the email to immediately configure – no need for details like hostnames, extension numbers, or passwords.

And that’s it! It just works. Issues like certificate management, which can be a manual process with other apps, are handled automatically.

Features Included:

  • Blind and assisted transfer
  • 3-way calling
  • Contacts and favorites – including BLF
  • BLF Lamp status of features that support it such as Day/Night and CallFlow
  • DND with scheduling for out-of-office convenience

Another great feature is that we’ve integrated Sangoma Meet, our award-winning video conferencing platform within Sangoma Connect Mobile, making it super simple to create or join a multi-party video conference.

How to Get It

Sangoma Connect Mobile is included, free-of-charge, for all new and existing PBXact systems.  It is also free-of-charge to FreePBX customers with an active Zulu license, for the same amount of users already purchased. Simply perform an update on your system, and Sangoma Connect will be available within the User Management Module.

Purchasing Options

FreePBX customers, without Zulu, wishing to purchase a Sangoma Connect Mobile license can do so from the Sangoma Portal Store.  We have integrated Sangoma Connect Mobile with Zulu Desktop so that customers  can take advantage of even further collaboration tools for your MacOS or Windows computer. Simply purchase the Zulu license from the portal store and choose to use Sangoma Connect Mobile, or both! If needed, here are some helpful instructions on how to purchase a license and how to install on your FreePBX system.

Download the Mobile Client

End users can download the iOS or Android app, for free, by searching for ‘Sangoma Connect’ in the respective app stores. A direct download link is also available within the invitation email end-users receive. Here is information on how to use the app.

Categories
Knowledge Base Technical

Asternic Stats and recording outgoing calls.

Asternic stats has the ability to record your outgoing calls in the stats database so they can be accessed from stats package.

But a customer noted two problems with this, firstly they wanted to set a different Music on Hold for outgoing calls and secondly “no answer” calls where the agent hungup before the callee answered.

Firstly we will deal with the Music on hold, Changing the MoH class caused calls not to be recorded in the database correctly. Code below is the reason for this as it causes the dial string to have 2 macros called, This is not possible.

extension_additional.conf:-
exten => s,n,ExecIf($["${MOHCLASS}"!="default" & "${MOHCLASS}"!="" & "${FORCE_CONFIRM}"="" ]?Set(DIAL_TRUNK_OPTIONS=M(setmusic^${MOHCLASS})${DIAL_TRUNK_OPTIONS}))

extensions_custom_asternic_outbound_freepbx.conf:-
exten => _X.,n,Dial(${QDIALER_CHANNEL},300,gM(queuedial-answer^${UNIQUEID}^${GM}^${QDIALER_QUEUE}^${QDIALER_AGENT}^${ST}^${AMPUSER})${DIAL_TRUNK_OPTIONS})

The fix is very simple for this one and required just 2 changes. one line added to set MoH in the dialplan and another to use Trunk_options and not the the one created in extensions_additional.conf

exten => _X.,n,Set(CHANNEL(musicclass)=${MOHCLASS}) ; Added to set the Music on hold class for the outgoing call Fixes bug in normal code
exten => _X.,n,Dial(${QDIALER_CHANNEL},300,gM(queuedial-answer^${UNIQUEID}^${GM}^${QDIALER_QUEUE}^${QDIALER_AGENT}^${ST}^${AMPUSER})${TRUNK_OPTIONS}) ;Was ${DIAL_TRUNK_OPTIONS} changed to set the Music on hold class for the outgoing call Fixes bug in normal code

The second problem is also fairly straight forward but took a bit of creative thinking, The problem was when an agent hung up on an outbound call the dialstatus returned to the dialplan was “CANCEL” and this is not reported upon by the asternic stats package. SO as the call is for all intents abandoned we added a line that if the dialstatus was “CANCEL” we would change it to “ABANDON”.

exten => h,n,Set(DIALSTATUS=${IF($["${DIALSTATUS}"="CANCEL"]?ABANDON:${DIALSTATUS})}) ;Added By Ian Plain to fix cancelled calls not showing in Asternic stats

This is a simple fix and now means calls are recorded as ABANDONED and with the time the Agent waited before hanging up.

Below is our version of the file extensions_custom_asternic_outbound_freepbx.conf with all the changes.

[macro-dialout-trunk-predial-hook]
exten => s,1,Noop(Test Track Outbound)
exten => s,n,Noop(Trunk is ${OUT_${DIAL_TRUNK}})
exten => s,n,Noop(Dialout number is ${OUTNUM})
exten => s,n,Noop(Dial options are ${DIAL_TRUNK_OPTIONS})
exten => s,n,Set(QDIALER_TRUNK_OPTIONS=${DIAL_TRUNK_OPTIONS})
exten => s,n,Set(QDIALER_AGENT=${DB(AMPUSER/${AMPUSER}/cidname)})
exten => s,n,GotoIf($["${QDIALER_AGENT}" != ""]?nextcheck)
exten => s,n,Noop(NO AMPUSER, exit normally with no tracking outbound)
exten => s,n,MacroExit()
exten => s,n(nextcheck),GotoIf($["${CDR(accountcode)}" != ""]?bypass)
exten => s,n,Noop(NO ACCOUNTCODE, exit normally with no tracking outbound)
exten => s,n,MacroExit()
exten => s,n(bypass),Set(PREDIAL_HOOK_RET=BYPASS)
exten => s,n,Goto(queuedial,${OUTNUM},1)
exten => s,n,MacroExit()
;; Dialplan for storing OUTBOUND campaing in queue_log
;; Goto(queuedial,YYYXXXXXXXX,1) where YYY is the queue-campaign code
;; and XXXXXXXX is the number to dial.
;; The queuedial context has the outobound trunk hardcoded
[queuedial]
; this piece of dialplan is just a calling hook into the [qlog-queuedial] context that actually does the
; outbound dialing - replace as needed - just fill in the same variables.
exten => X.,1,Set(QDIALER_QUEUE=${CDR(accountcode)}) ;exten => _X.,n,Set(QDIALER_AGENT=Agent/${AMPUSER}) exten => _X.,n,Set(QDIALER_AGENT=${DB(AMPUSER/${AMPUSER}/cidname)}) ; custom trunk check exten => _X.,n,Set(custom=${CUT(OUT${DIAL_TRUNK},:,1)})
exten => X.,n,GotoIf($["${custom}" = "AMP"]?customtrunk) ; it is normal trunk, not custom exten => _X.,n,Set(QDIALER_CHANNEL=${OUT${DIAL_TRUNK}}/${EXTEN})
exten => X.,n,GotoIf($["${OUT${DIAL_TRUNK}SUFFIX}" == ""]?continuequeuedial) exten => _X.,n,Set(QDIALER_CHANNEL=${OUT${DIAL_TRUNK}}/${EXTEN}${OUT_${DIAL_TRUNK}SUFFIX}) exten => _X.,n,Goto(continuequeuedial) ; it is a custom trunk exten => _X.,n(customtrunk),Set(pre_num=${CUT(OUT${DIAL_TRUNK},$,1)})
exten => X.,n,Set(the_num=${CUT(OUT${DIAL_TRUNK},$,2)})
exten => X.,n,Set(post_num=${CUT(OUT${DIAL_TRUNK},$,3)})
exten => _X.,n,GotoIf($["${the_num}" = "OUTNUM"]?outnum:skipoutnum)
exten => _X.,n(outnum),Set(the_num=${OUTNUM})
exten => _X.,n(skipoutnum),Set(QDIALER_CHANNEL=${pre_num:4}${the_num}${post_num})
exten => _X.,n(continuequeuedial),Noop(Qdialer channel = ${QDIALER_CHANNEL})
exten => _X.,n,Set(QueueName=${QDIALER_QUEUE})
exten => _X.,n,Goto(qlog-queuedial,${EXTEN},1)
[qlog-queuedial]
; We use a global variable to pass values back from the answer-detect macro.
; STATUS = U unanswered
; = A answered (plus CAUSECOMPLETE=C when callee hung up)
; The 'g' dial parameter must be used in order to track callee disconnecting.
; Note that we'll be using the 'h' hook in any case to do the logging when channels go down.
;
exten => X.,1,NoOp(Outbound call -> A:${QDIALER_AGENT} N:${EXTEN} Q:${QDIALER_QUEUE} Ch:${QDIALER_CHANNEL} Dialoptions:${TRUNK_OPTIONS}) exten => _X.,n,Set(ST=${EPOCH}) ;exten => _X.,n,Set(GM=${QDIALER_AGENT}) exten => _X.,n,Set(GM=${REPLACE(QDIALER_AGENT, ,)})
exten => _X.,n,Set(GLOBAL(${GM})=U)
exten => _X.,n,Set(GLOBAL(${GM}ans)=0)
exten => _X.,n,Macro(queuelog,${ST},${UNIQUEID},${QDIALER_QUEUE},${QDIALER_AGENT},ENTERQUEUE,-,${EXTEN})
exten => _X.,n,Set(CHANNEL(musicclass)=${MOHCLASS}) ; Added to set the Music on hold class for the outgoing call Fixes bug in normal code
exten => _X.,n,Dial(${QDIALER_CHANNEL},300,gM(queuedial-answer^${UNIQUEID}^${GM}^${QDIALER_QUEUE}^${QDIALER_AGENT}^${ST}^${AMPUSER})${TRUNK_OPTIONS}) ;Was ${DIAL_TRUNK_OPTIONS} changed to set the Music on hold class for the outgoing call Fixes bug in normal code
exten => _X.,n,Set(CAUSECOMPLETE=${IF($["${DIALSTATUS}" = "ANSWER"]?C)})
; Trapping call termination here
exten => h,1,NoOp( "Call exiting: status ${GLOBAL(${GM})} answered at: ${GLOBAL(${GM}ans)} DS: ${DIALSTATUS}" )
exten => h,n,Set(DB(LASTDIAL/${QDIALER_AGENT})=${EPOCH})
exten => h,n,Goto(case-${GLOBAL(${GM})})
exten => h,n,Hangup()
; Call unanswered
exten => h,n(case-U),Set(WT=$[${EPOCH} - ${ST}])
exten => h,n,Noop(unanswered ${DIALSTATUS})) ;Added By Ian Plain to fix cancelled calls not showing in Asternic stats
exten => h,n,Set(DIALSTATUS=${IF($["${DIALSTATUS}"="CANCEL"]?ABANDON:${DIALSTATUS})}) ;Added By Ian Plain to fix cancelled calls not showing in Asternic stats
exten => h,n,Macro(queuelog,${EPOCH},${UNIQUEID},${QDIALER_QUEUE},${QDIALER_AGENT},${DIALSTATUS},1,1,${WT})
exten => h,n,UserEvent(AgentComplete,Queue: ${QDIALER_QUEUE},TalkTime: 0,Channel: ${CHANNEL})
exten => h,n,Hangup()
; call answered: agent/callee hung
exten => h,n(case-A),Set(COMPLETE=${IF($["${CAUSECOMPLETE}" = "C"]?COMPLETECALLER:COMPLETEAGENT)})
exten => h,n,Noop(answered ${DIALSTATUS})) ;Added By Ian Plain to fix cancelled calls not showing in Asternic stats
exten => h,n,Set(WT=$[${GLOBAL(${GM}ans)} - ${ST}])
exten => h,n,Set(CT=$[${EPOCH} - ${GLOBAL(${GM}ans)}])
exten => h,n,Macro(queuelog,${EPOCH},${UNIQUEID},${QDIALER_QUEUE},${QDIALER_AGENT},${COMPLETE},${WT},${CT})
exten => h,n,UserEvent(AgentComplete,Queue: ${QDIALER_QUEUE},TalkTime: ${CT},Channel: ${CHANNEL})
exten => h,n,Hangup()
[macro-queuedial-answer]
; Expecting $ARG1: uniqueid of the caller channel
; $ARG2: global variable to store the answer results
; $ARG3: queue name
; $ARG4: agent name
; $ARG5: enterqueue
;
exten => s,1,NoOp("Macro: queuedial-answer UID:${ARG1} GR:${ARG2} Q:${ARG3} A:${ARG4} E:${ARG5}")
exten => s,n,Set(QDIALER_QUEUE=${ARG3})
exten => s,n,Set(QDIALER_QUEUE=${REPLACE(QDIALER_QUEUE, ,_)})
exten => s,n,GotoIf($["${CUT(DB(AMPUSER/${ARG6}/recording),=,3)}" = "Always"]?mixmonitor)
exten => s,n,GotoIf($["${DB(AMPUSER/${ARG6}/recording/out/external)}" = "always"]?mixmonitor)
exten => s,n,Goto(continue)
exten => s,n(mixmonitor),MixMonitor(${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/out-${QDIALER_QUEUE}-${ARG1}.wav,b,/usr/local/parselog/update_mix_mixmonitor.pl ${ARG1} ${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/out-${QDIALER_QUEUE}-${ARG1}.wav)
exten => s,n,Set(AUDIOHOOK_INHERIT(MixMonitor)=yes)
exten => s,n(continue),Set(NOW=${EPOCH})
exten => s,n,Set(WD=$[${NOW} - ${ARG5}])
exten => s,n,Macro(queuelog,${NOW},${ARG1},${ARG3},${ARG4},CONNECT,${WD})
exten => s,n,Set(GLOBAL(${ARG2})=A)
exten => s,n,Set(GLOBAL(${ARG2}ans)=${NOW})
exten => s,n,NoOp("Macro queuedial-answer terminating" )
[macro-queuelog]
; The advantage of using this macro is that you can choose whether to use the Shell version
; (where you have complete control of what gets written) or the Application version (where you
; do not need a shellout, so it's way faster).
;
; Expecting $ARG1: Timestamp
; $ARG2: Call-id
; $ARG3: Queue
; $ARG4: Agent
; $ARG5: Verb
; $ARG6: Param1
; $ARG7: Param2
; $ARG8: Param3
;
;exten => s,1,System( echo "${ARG1},${ARG2},${ARG3,${ARG4},${ARG5},${ARG6},${ARG7},${ARG8}" >> /var/log/asterisk/queue_log )
exten => s,1,QueueLog(${ARG3},${ARG2},${ARG4},${ARG5},${ARG6}|${ARG7}|${ARG8})

Categories
Asterisk Support Covid-19 FreePBX Knowledge Base Remote Working

Disabling Router SIP ALG

With many companies asking their employees to work from home, a common problem when trying to use a sip phone on a home network is the SIP ‘helper’ or ALG, Here is some advice on how to disable it on the more common routers that you may encounter.

SIP ALG (Application Layer Gateway) modifies VoIP traffic with the aim of solving NAT and firewall related problems. SIP ALG does this by inspecting SIP packets and modifying SIP Header and SDP data.

Unfortunately, SIP ALG was poorly implemented in a lot of cases, which has lead to it causing more issues than it corrects and due to this, we believe that, in general, it is best disabled.

Note – Many routers will re-enable SIP ALG after being powered off and on, or sometimes after a firmware update, therefore if it has been disabled in the past, and you know that the router was recently updated and powered off and on again, then it is always a good idea to log in to the router and double check the setting.

Virgin SuperHub: SIP ALG cannot be disabled in the settings of SuperHubs. Please click here for advice troubleshooting issues with SuperHubs. 

BT: SIP ALG cannot be disabled in the settings of BT HomeHubs, but can be disable with BT Business Hub versions 3 and higher:

Disabling a BT Business Hub 5’s SIP ALG

Fritz!Box: SIP ALG can’t be disabled.

DrayTek routers: Log in to your DrayTek via Telnet using an SSH client such as Putty: http://www.putty.org/

Check if SIP ALG is Enabled or Disabled:

To check if SIP ALG is Enabled or Disabled enter this command: sys sip_alg ?

If SIP ALG is disabled a ” 0 ” result will be returned.  If SIP ALG is enabled the result will be ” 1 “.

Disabling SIP ALG:

To Disable SIP ALG enter the following:

sys sip_alg 0
sys commit
sys reboot

The router will restart and save your changes.

Click here for additional general information about DrayTek Firewall setup. 

TP-Link routers: How to Disable SIP ALG on TP-Link ADSL modem router

Linksys: Check for a ‘SIP ALG’ option, in the ‘Administration’ tab under ‘Advanced’. 

May also need to disable SPI Firewall. 

Microtik: Disable ‘SIP Helper‘. 

Netgear: Look for a ‘SIP ALG’ checkbox in the ‘WAN’ settings.

Port Scan and DoS Protection should also be disabled.

Disable STUN in VoIP phone’s settings. 

D-Link: In your router’s ‘Advanced’ settings –> ‘Application Level Gateway (ALG) Configuration’ uncheck the ‘SIP’ option. 

Huawei: Many routers support SIP ALG (usually found in the ‘Security’ menu). 

SonicWALL Firewall: Under the VoIP tab, the option ‘Enable Consistent NAT’ should be enabled and ‘Enable SIP Transformations’ unchecked.  

Thomson: How to Disable SIP ALG on a Thomson Router HERE

Test with STUN disabled in your VoIP phone’s settings.

Adtran Netvanta: Disable SIP ALG under ‘Firewall/ACLs’ –> ‘ALG Settings’.

Even if there isn’t a SIP ALG option in your router’s settings, it may still be implemented. TelNet commands must be used to disable SIP ALG with TechnicolorThomsonSpeedTouch, some Draytek and some ZyXEL routers. 

Categories
Knowledge Base

Using FreePBX FollowMe

Follow Me allows you to redirect a call that is placed to one of your extension to another extension or external number.

You can program the system to ring your extension alone for a certain period of time, then ring some other destination(s), such as a mobile phone or another extension, then go to the original extension’s voicemail if the call is not answered.  

It can also be used to divert calls to another extension without ringing the ‘original’ extension, or ring both together in a ‘twinned’ manner. This is useful if you are regularly away from your desk

Your can modify certain Follow Me settings using the User Control Panel as well as disable and enable Follow Me using a feature code that is normally *21,

To use the UCP to change settings if you have had permissions enabled is done by clicking the COG icon on teh Follow me Widget and below is a short Video on the key settings

Categories
Knowledge Base

Setting Up your UCP

The UCP or user control panel is an integral part of freePBX, It lets users have control over their telephone experience.

Below is a short video for setting up the key components of the UCP including voicemail and the WebRTC softphone.

The UCP Phone or WebRTC Phone is an in-browser phone. The Administrator can enable the “WebRTC phone” and that is “attached” to a user’s extension, this phone will then receive phone calls at the same time as the users extension .

The UCP allows users to add multiple dashboards and resizable widgets, This functionality allows users to completely customize the look and feel of their User Control Panel.

The Voicemail widget allows you to view, listen and manage your voicemail settings. The voicemail widget also allows you to monitor and listen to other peoples mailboxes, This feature is invaluable for receptionists and PA’s as it allows them to monitor their Managers or teh main company mailbox. To monitor additional mailboxes contact your system administrator.

 The FreePBX User Management Module controls which mailboxes a user will be able to add as a widget in UCP as it is not just limited to the extensions own mailbox, This is useful for department managers or Receptionists.

The UCP also has a chat function built-in that allows remote users to chat between each other similar to any other webchat but with the added security of it being ‘siloed’ in your company.

For full details and instructions of all options please see the WIKI at Sangoma.com

Categories
Asterisk Support FreePBX Knowledge Base Support Technical

Backing up files in FreePBX 15

The first time you come to restore your FREEpbx 15 system you may find that not everything that you expected is there !

The new backup module backs up on a module by module base and not like before where is was DBs and Files.

Linked here is a repository that has the files to create a module that can be edited to backup directories.

https://bitbucket.org/cybercottage/filebackup

The file you need to edit is Backup.php

<?php

namespace FreePBX\modules\Filebackup;
use FreePBX\modules\Backup as Base;

class Backup extends Base\BackupBase
{
    public function runBackup($id, $transaction)
    {
        $this->addDirectories([
            '/etc/asterisk','/tftpboot',
        ]);
        $files = glob("/etc/asterisk/*conf");
        foreach ($files as $file) {
            $path = pathinfo($file, PATHINFO_DIRNAME);
            $this->addFile(basename($file), $path, '', "conf");
    }
    $files = glob("/tftpboot/*xml");
        foreach ($files as $file) {
            $path = pathinfo($file, PATHINFO_DIRNAME);
            $this->addFile(basename($file), $path, '', "conf");
        }
        return $this;
    }
}

As you see we are backing up /etc/asterisk and /tftpboot , But only *.conf files in /etc/asterisk and only *.xml files in /tftpboot

Details on the new backup system are here https://wiki.freepbx.org/display/FOP/Implementing+Backup

Thanks to James Finstrom for the original version of this, This version is not to replace his work but only to give an example of working with Multiple directories

The downloaded zip file needs to be added as a Local module via Module Admin and enabled, It will obviously give a signing error but this can be disabled in Advanced settings or ignored ;-)

Enjoy but don’t blame me if it doesn’t work. Ive tested it on my systems and all seems good by your experience may be different

Categories
Blog Knowledge Base

SSL, FOP2 and All that..

There are a few common questions and gotchas when using fop2 on a FreePBX server using ssl.

The symptom is simple you cant connect and at the bottom left if tels you that it cant connect over websockets to port 4445 and will finally time out saying Flash is required.. None of this is awfully helpful to be honest.

But the fix is simple and its a shame by default its not this .

In your fop2.cfg file local the lines below and edit them so they match .

It maybe that your certificate names aren’t as below, In that case substitute webserver.XXX with the correct file names.

; If you access fop2 via https, browsers will try to use wss (Secure 
; web sockets) and for that it requires a certificate file and key file,
; the same ones you have in your web server configuration. Be sure to
; specify the correct certificates, the defaults are the ones for a 
; regular Centos installation:
;

ssl_certificate_file=/etc/httpd/pki/webserver.crt
ssl_certificate_key_file=/etc/httpd/pki/webserver.key
;ssl_certificate_file=/etc/pki/tls/certs/localhost.crt
;ssl_certificate_key_file=/etc/pki/tls/private/localhost.key

Thats its. Fop2 will now work over HTTPS

Categories
Blog Knowledge Base

Recording Announcements in FreePBX 13 and later

This was recorded a while ago as an aid to a customer, Its a short video on recording prompts and then adding them to an announcment so they can be used in call flow.

Categories
Handsets

Gigaset N300

The DECT IP base station that brings communication to new heights with parallel calls, exceptional sound and online features.

N300IP £49

Hybrid DECT IP base station for landline and VoIP calls Multi-line for up to 6 handsets and 4 (3 SIP + 1 PSTN) parallel calls Energy-saving Gigaset ECO DECT Compatible with multiple Gigaset handsets Compatible with provisioning standards: TR069, MAC address, code based auto-configuration Expandable up to 6 VoIP accounts / numbers Free calls between Gigaset VoIP phones via Gigaset.net Email reader Can connect up to 6 RTX 4002 DECT Repeaters for extended range Now fully compatible with the A510H (Please ensure you are on firmware version 049 released Oct 2011). View the Gigaset compatibility chart for more information.

The Gigaset N300 IP is the easy-to-configure hybrid DECT IP base station that lets users enjoy calling over both a landline and the internet. Multi-line support allows registration of up to 6 different compatible Gigaset handsets to the base station and up to 4 parallel calls (1 landline + 3 VoIP) can be made at once. All VoIP calls are in HD sound thanks to exceptional HDSP™ technology. Energy-saving2 ECO DECT means that the Gigaset N300 IP is eco-conscious as well as hi-tech.

Categories
Asterisk Support FreePBX Knowledge Base Support Technical

Resetting root password on FreePBX 14 and other Centos 7 servers

Boot your system and wait until the GRUB menu appears. On some systems you may need to press the “Escape” key to access the GRUB menu. FreePBX should show this for a few seconds on Boot

Highlight your Operating System and then press “e” to edit. You have to be quick here simpler to just press e when the menu appears and you will see similar to below.

Find the line beginning with linux. In this example the line begins linux16.

Manually delete the entries quiet and rhgb from the line. then append the following statement to the end of the line init=/bin/sh Don’t worry if your command is spread across more than one line. A continuation character “\ will be inserted automatically.

Now reboot your system now using the options specified by pressing the keys Ctrl +X

Once the system has re-booted, you will be presented with a shell prompt without having to enter any user name or password.

At this command prompt you will need to enter the following commands:

Remount the “/” root filesystem in Read/Write mode: mount -o remount,rw /

Issue the passwd command to reset the root account password: passwd

Then enter the new password as prompted twice

Then remount the “/” root filesystem in Read Only mode: mount -o remount,ro /

You can now restart the system and login with your new password.