Before using these scripts read the DISCLAIMER here.
To perform this how-to you must be familiar with the command line, as I mentioned in other post ( @klh excuse the off-topic ) I created a service to record all calls.
The first step is run :
arecord file.wav
make a call and then stop recording with Ctrl+C
play recorded call, if voices are not clearly heard unfortunately this how-to is already over
otherwise you can proceed ...
- You have to create callrecorder service, to create it mount root in read/write mode :
sudo mount -o remount,rw /
sudo nano /etc/init.d/callrecorder :
#! /bin/sh
### BEGIN INIT INFO
# Provides: callrecorder
# Required-Start: $local_fs
# Required-Stop: &local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Call Recorder
# Description: Call Recorder Daemon
### END INIT INFO
# Written by Br1 <br1@spacelinux.it>
case "$1" in
start)
echo "Call recorder starting ..."
bash -c 'cd /home/phablet/.callrec/ && ./prepare-sh &'
;;
stop)
pkill manager.sh ; pkill ini.sh ; pkill ter.sh ; pkill ris.sh ;
rm /home/phablet/.callrec/CallRecorder/.*swp 2> /dev/null ;
rm /home/phablet/aRam/Rec_Call/.*swp 2> /dev/null ;
echo "Call recorder stopped !"
;;
*)
echo "Usage: sudo service callrecorder {start|stop}"
exit 1
;;
esac
exit 0
and set permission with : sudo chmod 755 /etc/init.d/callrecorder
enable autostart with : sudo update-rc.d callrecorder defaults
( if you want disable it : sudo update-rc.d -f callrecorder remove)
-
you have to create 3 directories :
/home/phablet/aRam
/home/phablet/.callrec
/home/phablet/MyRec -
and you also have to create 5 scripts :
1 - nano /home phablet/.callrec/prepare-sh :
#!/bin/sh
# ----- start/stop service section -----
#
# check service status
if ps aux | grep -q "[m]anager.sh" ; then echo " ! Service already running !" ; exit
fi
# check if ramdisk is mounted and exec scripts
if grep -qs '/phablet/aRam ' /proc/mounts ; then cd /home/phablet/aRam/Rec_Call ; ./manager.sh & ./ini.sh & ./ter.sh & ./ris.sh & exit
fi
# ----- boot section -----
#
/bin/sleep 10 ;
# clear cache and buffer
sh -c "free && sync && echo 3 > /proc/sys/vm/drop_caches && free" ;
# create ramdisk
mount -t tmpfs -o size=200M tmpfs /home/phablet/aRam ;
# create directory
mkdir -p /home/phablet/aRam/Rec_Call ;
# copy scripts to directory just created
cp -rp /home/phablet/.callrec/*.sh /home/phablet/aRam/Rec_Call ;
# and exec them
cd /home/phablet/aRam/Rec_Call ; ./manager.sh & ./ini.sh & ./ter.sh & ./ris.sh &
exit
2 - nano /home/phablet/.callrec/manager.sh :
#!/bin/sh
while true
do
FL1=/home/phablet/aRam/Rec_Call/fl1 ;
FL2=/home/phablet/aRam/Rec_Call/fl2 ;
FL3=/home/phablet/aRam/Rec_Call/fl3 ;
RecDir=/home/phablet/MyRec ;
HomDir=/home/phablet/aRam/Rec_Call ;
# if fl1 exist ini.sh intercepted outgoing or incoming call
if [ -f "$FL1" ]; then
# deletes temporary file and starts recording as phablet user (with .new extension)
rm -f $FL1 ; su phablet -s /usr/bin/arecord /home/phablet/MyRec/"$(date +%d_%m_%y__%H_%M_%S)".wav.new &
fi
# if fl2 exist call has ended
if [ -f "$FL2" ]; then
# deletes the temporary file and stop recording
rm -f $FL2 ; pkill -f arecord ; sleep 0.2 ;
# if fl3 exist call was answered
if [ -f "$FL3" ]; then
# delete .new extension and exec three scripts
rm -f $FL3 ; mv $RecDir/*.new $RecDir/"$(date +%d_%m_%y__%H_%M_%S)".wav ; $HomDir/ini.sh & $HomDir/ter.sh & $HomDir/ris.sh &
else
# call was not answered
# delete recording and exec two scripts
rm $RecDir/*.new ; $HomDir/ini.sh & $HomDir/ter.sh &
fi
fi
sleep 1 ;
done ;
3 - nano /home/phablet/.callrec/ini.sh :
#!/bin/sh
cd /home/phablet/aRam/Rec_Call ;
inicmline="dbus-monitor --system interface=org.ofono.VoiceCallManager member=CallAdded" ;
$inicmline | while read line
do
echo $line | grep "incoming\|dialing"
if [ "$?" -eq "0" ]; then
echo "";/bin/touch fl1;echo "";
break
fi
done
4 - nano /home/phablet/.callrec/ter.sh :
#!/bin/sh
cd /home/phablet/aRam/Rec_Call ;
tercmline="dbus-monitor --system interface=org.ofono.VoiceCall member=PropertyChanged" ;
$tercmline | while read line
do
echo $line | grep "disconnected"
if [ "$?" -eq "0" ]; then
echo "";/bin/touch fl2;echo "";
break
fi
done
5 - nano /home/phablet/.callrec/ris.sh :
#!/bin/sh
cd /home/phablet/aRam/Rec_Call ;
riscmline="dbus-monitor --system interface=org.ofono.VoiceCall member=PropertyChanged" ;
$riscmline | while read line
do
echo $line | grep "StartTime"
if [ "$?" -eq "0" ]; then
echo "";/bin/touch fl3;echo "";
break
fi
done
make all scripts executable with chmod u+x
- you can start the service with : sudo service callrecorder start
or reboot device
-------- overview --- how it works --------
- callrecorder service run prepare-sh script and allows you to stop the execution by terminating 4 running processes
- prepare-sh creates ramdisk in order to speed up read/write operations, copies 4 scripts on ramdisk and executes them, some more details in scripts comments (any text after a hash sign '#')
I was planning to make a single script always running and it didn't work, so I created a four scripts system :
-
manager.sh handles three child/processes scripts, each of them intercepts a string (dbus-monitor) creates temporary file and exit
-
ini.sh intercepts outgoing and incoming calls
-
ris.sh intercepts the start of phone communication (call was answered)
-
ter.sh intercepts the end of phone communication
the last two would suffice, however, starting the recording at the beginning of phone communication, sometimes 1/2 seconds are lost ... so I preferred to start the recording on outgoing/incoming calls (if there is no answer recording is deleted)
Calls are recorded in uncompressed format (wav) but if you periodically delete the recordings there will be no problems ... I prefer to convert them (to ogg format) daily with crontab managed script, if you want I attach it, but it will be necessary install ffmpeg (via apt), I will complete it to delete recordings older than 40 days.
I hope I did not forget anything ... English is not my natural language, if something is not clear, you ask and I will try to explain better.
I have not detected abnormal battery drain, maybe these scripts can be improved, anyway callrecorder service works fine on my Xiaomi Mi A2.
I want to say Thanks to all volunteers working on UBports project, having linux on a smartphone is very rewarding