Ubuntu Qt软件deb打包 及 去除图形界面自启动
Ubuntu打包deb文件
1.建立目录结构
2.目录内容
1) 子目录DC520:
Get以上内容步骤:
(1) 创建目录DC520(自己软件的名字,可变),将Qt release编译生成的DC520可执行文件放在该软件包中。
(2) 生成依赖库,创建pack.sh文件 命令:touch pack.sh
内容:
#!/bin/sh
exe="DC520"
destDir=`pwd`
dependenlibList=$(ldd $exe | awk '{if (match($3,"/")){ printf("%s "),$3} }')
cp $dependenlibList $destDir
执行pack.sh 生成依赖库
(3) 可以将自己软件需要的配置文件等也放入上面文件夹。
(4) 创建DC520.sh 内容如下(设置临时环境变量并启动程序):
#!/bin/sh
appname=`basename $0 | sed s,\.sh$,,`
dirname=`dirname $0`
tmp="${dirname#?}"
if [ "${dirname%$tmp}" != "/" ];
then
dirname=$PWD/$dirname
fi
LD_LIBRARY_PATH=$dirname
export LD_LIBRARY_PATH
QML2_IMPORT_PATH=$dirname/qml
export QML2_IMPORT_PATH
QT_PLUGIN_PATH=$dirname/plugins
export QT_PLUGIN_PATH
$dirname/$appname "$@"
2) lib目录
(1)DC520.desktop
[Desktop Entry]
Version=0.1 #应用程序版本
Name=DC520 #程序名
Comment=create by Charles#注解
Exec=/usr/bin/DC520/DC520.sh#执行路径
Keywords=google,DC520,dc520#搜索关键字
StartupNotify=false
Terminal=false
Type=Application
Categories=Utility;Application;System;Archiving;
Hidden=false
Icon=/usr/share/pixmaps/DC520.png#图标
(2) 图标
放自己的图标
3) DEBIAN目录
(1)control文件内容
Package:DC520
Version:0.1
Section:utils
Priority:extra
Maintainer:Charles
Depends: #空 因为库已经在DC520里面了
Architecture:amd64
Description:the software is an opensource package from DAKEWE
(2)postinst文件内容
创建命令:touch postinst && chmod 755 postinst
echo "Start to install"
mv -f /application/lib/DC520.desktop /usr/share/applications/
mv -f /application/lib/DC520.png /usr/share/pixmaps/
mv -f /application/DC520/* /usr/bin/
echo "set QT_PLUGIN_PATH in file .profile"
echo "QT_PLUGIN_PATH=/usr/lib/x86_64-linux-gnu/qt5/plugins" >> ~/.profile
echo "Install ok"
(3)postrm文件内容
创建命令:touch postrm&& chmod 755 postrm
echo "Start to remove"
rm -rf /usr/share/applications/DC520.desktop
rm -rf /usr/share/pixmaps/DC520.png
rm -rf /usr/bin/DC520
echo "Remove finished"
3 打包命令
打包命令:sudo dpkg -b mydeb/ DC520_0.1_amd64.deb (文件名自定义)
安装命令:sudo dpkg -i DC520_0.1_amd64.deb
卸载命令:sudo dpkg -r DC520(app名字)
4找库
(打包到没有环境的系统上会报错,跑不起来,这个坑里爬了很久)
(1)报错缺少xcb等
解决过程:
.将QT安装路径下将qml 和 plugins整个目录拷到执行目录
.将软键盘的配置拷进来
.再报缺什么文件就拷什么文件
.环境变量:
export QML2_IMPORT_PATH=$dirname/qml
export QT_PLUGIN_PATH=$dirname/plugins
Ubuntu去除图形界面开机自启动
1.开机自启动执行文件rc.local
rc.local内容:
#!/bin/sh
#以下一行是你要执行的程序
/usr/bin/DC520/startupDC520.sh
exit 0
创建命令:touch rc.local
将文件拷贝到/etc下 命令:sudo cp -r ./rc.local /etc
记得加可执行权限 命令:sudo chmod +x /etc/rc.local
2. 去除Ubuntu系统图形界面脚本
文件setupstartupcommand.sh (文件名自定义) 手动执行
内容:
#!/bin/sh
CFG=/etc/default/grub #need config file
K=GRUB_CMDLINE_LINUX_DEFAULT #key word
V="text" #new value
sed -i "/^$K/c\
$K=\"$V\"" $CFG #must be a new line
update-grub
systemctl set-default multi-user.target
3.配置脚本
文件setupstartupDC520.sh(文件名自定义) 手动执行
内容:
#!/bin/sh
cp -r ./rc.local /etc
chmod +x /etc/rc.local
chmod +x /usr/bin/DC520/startupDC520.sh
chmod +x /usr/bin/DC520/DC520.sh
CFG=/etc/rc.local #need config file
NL="/usr/bin/DC520/startupDC520.sh"
#delete old config about "DC520"
sed -i '/DC520/'d $CFG
#delete old config about "startup.sh"
sed -i "/^exit 0/i\
$NL" $CFG
4.在没有图形界面被调用的执行脚本
文件:startupDC520.sh(在rc.local中被调用)
内容:
#!/bin/sh
#该脚本用于在没有启动桌面的情况下启动软件
#该脚本一般在/etc/rc.local中调用
lineCount=$(df -h | grep "dkwusb" | wc -l)
if [ $lineCount -eq 0 ]
then
echo "当前没有挂载U盘"
echo "删除dkwusb目录"
rm /media/dkwusb -rf
else
echo "当前挂载了U盘"
fi
#后台启动软件
pulseaudio --start --log-target=syslog
xinit /usr/bin/DC520/DC520.sh -- /usr/bin/X :1 &
5.增加Ubuntu系统图形界面脚本
文件:setupstartupdesktop.sh(文件名自定义) 手动执行
内容:
#!/bin/sh
CFG=/etc/default/grub #need config file
K=GRUB_CMDLINE_LINUX_DEFAULT #key word
V="quiet splash" #new value
sed -i "/^$K/c\
$K=\"$V\"" $CFG #must be a new line
update-grub
systemctl set-default graphical.target
6.接除绑定
文件:setupstartupnoDC520.sh (文件名自定义)
内容:
#!/bin/sh
CFG=/etc/rc.local #need config file
NL="/usr/bin/DC520/startupDC520.sh"
#delete old config about "DC520"
sed -i '/DC520/'d $CFG
#delete old config about "startup.sh"
sed -i '/startupastp/'d $CFG