-2

我有一个由 systemd 在启动时运行的脚本。它运行我的应用程序,如果用户退出应用程序,则脚本运行 ts_calibrate,完成后它再次运行我的应用程序。在 Angstrom 上运行良好,但在运行 Debian 的 Beaglebone Black 上却不行。

我的 mita.sh 脚本

while [ 1 ]; do
        if [ -e /etc/pointercal ]; then
                echo "Pointercal exists"
                ./mita6 -platform linuxfb -plugin evdevtouch:/dev/input/event1
                echo "Quit mita6"
        else
                echo "No pointercal"
                ts_calibrate
                echo "Quit ts_calibrate"
                ./mita6 -platform linuxfb -plugin evdevtouch:/dev/input/event1
        fi
echo "Calibrating..."
ts_calibrate
echo "Calibration Done."
sleep 2
done

当系统现在启动时,我的应用程序启动正常,但是当我退出应用程序 ts_calibrate 时无法运行。我收到以下错误:-

ts_open:没有这样的文件或目录

如果我以 root 身份登录,那么我可以从命令行运行脚本,一切都按预期工作。
如果从命令行输入,sudo ts_calibrate那么我会得到同样的错误。
有人可以帮我理解这里发生了什么吗?
如果我以 root 身份 ssh,我可以成功运行脚本,但如果我随后 sudo,我似乎没有运行 ts_calibrate 的权限!systemd 似乎也没有正确的权限!

问候,
詹姆斯。

.
.
.
系统服务

#!/bin/sh -

[Unit]
Description=My Script

[Service]
USER=root
WorkingDirectory=/home/root
ExecStart=/bin/sh -c 'source /etc/profile ; /home/root/mita.sh'
After=dropbear.service
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

.
uname -a
Linux beaglebone 3.8.13-bone67 #1 SMP Wed Sep 24 21:30:03 UTC 2014 armv7l GNU/Linux

4

1 回答 1

0

似乎在执行 ts_calibrate 时没有传递环境变量,所以我必须确保它们已设置并通过。
最终的工作脚本如下所示:-

export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event1

while [ 1 ]; do
        if [ -e /etc/pointercal ]; then
                echo "Pointercal exists"
                /home/root/mita6 -platform linuxfb -plugin evdevtouch:/dev/input/event1
                echo "Quit mita6"
        else
                echo "No pointercal"
                killall mita6
                sudo -E /usr/bin/ts_calibrate
                echo "Quit ts_calibrate"
                /home/root/mita6 -platform linuxfb -plugin evdevtouch:/dev/input/event1
        fi
echo "Calibrating..."
killall mita6
sudo -E /usr/bin/ts_calibrate
echo "Calibration Done."
sleep 2
done
于 2014-11-12T10:00:30.153 回答