我想修改 unity 不显示启动器(左侧栏)根本。我并不寻求任何可以让启动器在某些情况下可见的解决方案。我真的希望它完全消失。这是送给我未婚妻的礼物,我想让她的 Linux 笔记本电脑获得尽可能高的女性接受度,该笔记本电脑运行着带有精美图标的 docky dock,使其看起来像是来自那家知名的水果公司。
关于哪些包和哪些源文件我应该学习吗?
我希望它像用“unity.launcher.show()”注释掉该行并重新编译一样简单:-)
谢谢你!
答案1
我自己的问题的答案是:
- Launcher.cpp、unityshell.cpp、DashController.cpp 和 HudController.cpp 适用于 Unity 版本 < 7.4.0 和
- 适用于 Unity 版本 7.4.0 的 Launcher.cpp 和 UnitySettings.ccp
来自 unity 源包。
但我回答的不止这些,因为每个想回答我的问题的人也都想知道如何处理这些源文件。
内容:
A. 自己编译 或者
B. 获取二进制文件
免责声明:我完全不知道,并且只在 12.04 上使用 unity 5.20.2、在 14.04 上使用 unity 7.2.6、在 15.10 上使用 unity 7.3.2 和在 16.04 上使用 unity 7.4.0 进行了测试
A. 编译 Unity 不显示启动器
0. 缺乏耐心
此脚本至少适用于 12.04、14.04 和 15.10。只需根据需要在末尾取消注释即可:
#!/bin/bash
mkdir temp-build-dir; cd temp-build-dir
export HWE=$(dpkg-query -l xserver*-lts-* | grep ^ii | cut -d" " -f3 | rev | cut -d- -f1 | rev | sort -u)
sudo apt-get install unity xserver-xorg-video-dummy-lts-$HWE
sudo apt-get build-dep unity
sudo apt-get install apt-show-versions devscripts dpkg-dev fakeroot nano
apt-get source unity
cd unity-*
# you can leave the comment field in the changelog empty but dont forget to save the file
EDITOR=nano debchange --newversion $(apt-show-versions unity | cut -d " " -f2)
find . -iname Launcher.cpp -exec sed -i -e '1,/void Launcher::DrawContent(nux::GraphicsEngine/b' -e '0,/{/s//{\nreturn;/' {} \;
# for unity 7.4.0 comment out this for statement and read the explanation Nr. A.4
for i in unityshell.cpp DashController.cpp HudController.cpp; do
find . -iname $i -exec sed -i -e 's/launcher_width =/launcher_width =0; \/\//' {} \;
done
dpkg-buildpackage -rfakeroot -d -us -uc -b
sudo dpkg -i ../unity_*.deb
# For 12.04 use:
# gconftool --type Integer --set /apps/compiz-1/plugins/unityshell/screen0/options/launcher_hide_mode 1
# For 14.04 use:
# dconf write "/org/compiz/profiles/unity/plugins/unityshell/launcher-hide-mode" 1
然后重新启动 Unity 就完成了。
1. 寻找正确的源文件
经过反复试验,我发现需要更改的源文件是
- Launcher.cpp -> 添加一行以不再显示启动器
- unityshell.cpp、DashController.cpp 和 HudController.cpp -> 将启动器的宽度设置为零
所有四个文件都包含在源包“unity”中。
2. 获取源代码
我必须手动安装包 xserver-xorg-video-dummy-lts-{your HWE version} 来解决一些依赖问题,然后才能为 unity 安装 build-deps:
sudo apt-get install xserver-xorg-video-dummy-lts-{put your HWE name here}
您可以使用以下命令找到 HWE 的名称(版本):
dpkg-query -l xserver*-lts-* | grep ^ii | cut -d" " -f3 | rev | cut -d- -f1 | rev | sort -u
此后,其余的工作就完成了:
sudo apt-get build-dep unity
apt-get source unity
cd unity-*
3. 在 Launcher.cpp 中添加一行
find . -iname launcher.cpp -exec gedit {} \;
查找函数“void Launcher::DrawContent(nux::GraphicsEngine& GfxContext, bool force_draw)”并在其主体开头放置“return;”,如下所示:
void Launcher::DrawContent(nux::GraphicsEngine& GfxContext, bool force_draw)
{
return; //dont show launcher anymore
...
这足以不再显示启动器。但仪表盘和 HUD 仍会将屏幕左侧的启动器位置留空。
4. 在 unityshell.cpp、DashController.cpp 和 HudController.cpp / UnitySettings.cpp 中将启动器宽度设置为零
对于 unity < 7.4.0:
使用编辑器将 unityshell.cpp、DashController.cpp 和 HudController.cpp 中出现的所有“launcher_width =”替换为“launcher_width =0; //”。
或者直接使用此命令
for i in unityshell.cpp DashController.cpp HudController.cpp; do find . -iname $i -exec sed -i -e 's/launcher_width =/launcher_width =0; \/\//' {} \; ; done
对于 Unity 7.4.0:
找到文件 UnitySettings.cpp 并将 LauncherSize 末尾的返回值替换为:
int Settings::LauncherSize(int monitor) const
{
if (monitor < 0 || monitor >= (int)monitors::MAX)
{
LOG_ERROR(logger) << "Invalid monitor index: " << monitor << ". Returning 0.";
return 0;
}
return 0; // pimpl->launcher_sizes_[monitor];
}
仅当您希望破折号显示在屏幕左侧而不占用启动器使用的任何边距时才需要这样做。
5. 在更新日志中设置正确的版本
在我的例子中(12.04,unity 5.20.2),我必须使用以下命令将 unity 源的版本从 5.20 更改为 5.20.2
EDITOR=nano debchange --newversion $(apt-show-versions unity | cut -d " " -f2)
编译之前,避免安装时依赖关系被破坏。不要忘记保存文件。
6.编译安装
然后我使用这个重新编译:
dpkg-buildpackage -rfakeroot -d -us -uc -b
安装新包:
sudo dpkg -i ../unity_*.deb
(据我所见和测试,实际上需要的唯一文件是
find . -name libunityshell.so | grep unity/usr/lib/compiz/libunityshell.so
用新的替换 /usr/lib/compiz/libunityshell.so 就足够了,但如果您想确定,只需安装上面写的新 unity 包即可。)
7. 将启动器设置为自动隐藏
# For 12.04:
gconftool --type Integer --set /apps/compiz-1/plugins/unityshell/screen0/options/launcher_hide_mode 1
# For 14.04:
dconf write "/org/compiz/profiles/unity/plugins/unityshell/launcher-hide-mode" 1
就是这样。重新启动 Unity,启动器就消失了!
B. 如果你愿意相信并直接获取二进制文件
如果你希望获得二进制文件以及你的 Unity 版本和 PC 架构的组合
unity --version
getconf LONG_BIT
可以在下面找到,只需下载正确的包
32位
- unity_5.20.0-0ubuntu3_i386_nolauncher.deb
- unity_5.20.2_i386_nolauncher.deb
- unity_7.2.6+14.04.20151021-0ubuntu1_i386_nolauncher.deb
- unity_7.3.2+15.10.20151016-0ubuntu1_i386_nolauncher.deb
64 位
- unity_5.20.0-0ubuntu3_amd64_nolauncher.deb
- unity_7.2.6+14.04.20160408-0ubuntu1_amd64_nolauncher.deb
- unity_7.3.2+15.10.20151016-0ubuntu1_amd64_nolauncher.deb
- unity_7.4.0+16.04.20160715-0ubuntu1_amd64_nolauncher.deb
下载完成后检查 deb 文件
md5sum unity_*.deb
结果应该是这些之一
0a5f7fc9255262e5803656d83f84f7c5 unity_5.20.0-0ubuntu3_amd64_nolauncher.deb
717dc41f4cad6410c997e1014f5f3f1d unity_5.20.0-0ubuntu3_i386_nolauncher.deb
594eb8b87f8a56697865c051c4db5073 unity_5.20.2_i386_nolauncher.deb
8ed070afa4d7d6da8222d03b8ad5ebf3 unity_7.2.6+14.04.20160408-0ubuntu1_amd64_nolauncher.deb
abd32e40e8a10bd603b9fc44014cb179 unity_7.2.6+14.04.20151021-0ubuntu1_i386_nolauncher.deb
43c56b889028bf368da01780c0a099b9 unity_7.3.2+15.10.20151016-0ubuntu1_amd64_nolauncher.deb
64474d1a8280ed4113d748a57422ddcc unity_7.3.2+15.10.20151016-0ubuntu1_i386_nolauncher.deb
4fecdb9b4f590e00609baa3b98f55cc0 unity_7.4.0+16.04.20160715-0ubuntu1_amd64_nolauncher.deb
然后安装包
sudo dpkg -i unity_*.deb
将启动器设置为自动隐藏并重新启动 Unity。就这样!
如果出现问题并且 Unity 无法启动:
sudo apt-get install --reinstall unity
但如果一切正常,您可能希望阻止新包被更新:
echo "unity hold" | sudo dpkg --set-selections
在我的 PC 上只编译了文件“unity_5.20.2_i386_nolauncher.deb”。其他 deb 文件是在所谓的“云计算机”上制作的(因为机房看起来很像云……),使用以下脚本变体:
#!/bin/bash
sudo apt-get update
sudo apt-get -y dist-upgrade
sudo apt-get -y build-dep unity
sudo apt-get -y install unity devscripts dpkg-dev fakeroot nano
mkdir temp-build-dir; cd temp-build-dir
rm -r unity-*
apt-get source unity
cd unity-*
find . -iname Launcher.cpp -exec sed -i -e '1,/void Launcher::DrawContent(nux::GraphicsEngine/b' -e '0,/{/s//{\nreturn;/' {} \;
# for unity 7.4.0 comment out this for statement and read the explanation Nr. A.4
for i in unityshell.cpp DashController.cpp HudController.cpp; do
find . -iname $i -exec sed -i -e 's/launcher_width =/launcher_width =0; \/\//' {} \;
done
dpkg-buildpackage -rfakeroot -d -us -uc -j2 -b
cp ../unity_*.deb ../$(echo ../unity_*.deb | sed -e 's/.deb$/_nolauncher.deb/')