英文:
Refresh launcher's icon without restarting xfce4-panel
问题
我有一个shell脚本,用于替换xfce4-panel启动器的图标。我正在寻找一种在不重新启动xfce4-panel的情况下刷新启动器图标的解决方案。
以root身份重新启动xfce4-panel可能会导致各种问题,比如在尝试通过CentOS UI重新启动服务器时出现错误,因为会话是由另一个用户启动的。我尝试使用命令像"sudo -u USER xfce4-panel --replace"来重新启动xfce4-panel,但问题仍然存在。
英文:
I have a shell script that replaces a favicon used as an image for a xfce4-panel launcher. I'm looking for a solution to refresh the launcher's icon without restarting xfce4-panel.
Restarting xfce4-panel as root could cause various issues, such as errors when trying to restart the server through the CentOS UI, as the session is launched by another user. I attempted to restart xfce4-panel using commands like "sudo -u USER xfce4-panel --replace," but the issue still persists.
答案1
得分: 1
I have translated the non-code portions of your text:
"在经过多天的搜索之后,我发现了一种可以强制xfce4-panel刷新图标而无需重新启动的解决方案。解决方案涉及编辑xfce4-panel启动器的配置文件。通过修改文件,xfce4-panel会识别到已经进行了更改并刷新启动器,包括相关的图标。
因此,我在我的脚本中集成的代码如下:
# 包含启动器及其相应配置文件目录的路径
launchers_path="/home/USERNAME/.config/xfce4/panel"
# 您想要更新的启动器的名称
launcher_name="MyLauncher"
# 循环遍历包含要更新的启动器名称的每个启动器配置文件
for launcher in $(grep -rl $launcher_name $launchers_path); do
# 使用sed将"favicon.ico"替换为相同的名称,以编辑文件并强制xfce4-panel刷新启动器
sed -i 's/favicon.ico/favicon.ico/g' $launchers_path/$launcher
done
阅读这个解决方案后,很自然会有一些问题:
- 为什么我要使用循环?
原因是启动器的文件夹命名为"launcher-N",其中"N"表示启动器的编号,可能表示每个启动器的创建顺序。为了确保准确性,我选择迭代包含我想要更新的启动器名称的每个配置文件,以找到相应的配置文件。
- 为什么我要用相同的名称替换"favicon.ico"?
在我的情况下,在第一个脚本中刚刚替换了文件"favicon.ico"。因此,我采用的解决方法只是编辑文件并通过xfce4-panel触发刷新启动器的图像。在您的情况下,您可以使用新图像的路径或名称。
其他信息:
在尝试这个解决方案之前,我尝试使用'touch configuration_file'命令来更新文件的日期并强制刷新,但没有成功。"
英文:
After differents days of searching, i have discovered a solution to force xfce4-panel to refresh icons without restarting it. The solution involves editing the configuration file of the xfce4-panel launcher. By modifying the file, xfce4-panel recognizes that changes have been made and refreshes the launcher, including the associated icon.
So the code that i have integrated in my script is the following :
# path that includes directories of launchers and their corresponding configuration files
launchers_path="/home/USERNAME/.config/xfce4/panel"
# name of the launcher that you want to update
launcher_name="MyLauncher"
# loop over each launcher configuration file that contains the name of the launcher to update
for launcher in $(grep -rl $launcher_name $launchers_path); do
# using sed to replace "favicon.ico" by the same name in order to edit the file and force xfce4-panel to refresh the launcher
sed -i 's/favicon.ico/favicon.ico/g' $launchers_path/$launcher
done
Upon reading this solution, it's natural to find yourself asking some questions :
- Why did i use a loop?
The reason is that the folders of the launchers are named "launcher-N" where "N" represents the number of the launcher, possibly indicating the order of creation for each launcher. To ensure accuracy, i chose to iterate over each configuration file that contains the name of the launcher i wanted to update, in order to locate the corresponding configuration file.
- Why did i replace "favicon.ico" with the same name?
In my particular case, the file "favicon.ico" is replaced just before in the first script. Therefore, the workaround i employed was simply to edit the file and trigger the refreshing of the launcher's image by xfce4-panel. In your case, you can utilize the path or name of the new image.
Other informations :
Before this solution, i attempted to use touch configuration_file
command to update the file's date and force a refresh, but it did not work.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论