我想在启动时启动 python 脚本。脚本使用 每小时自动更改壁纸feh --bg-max PATH/to/bg
。使用 Arch linux 和 qtile 窗口管理器。我曾尝试在.xinitrc
before中执行它exec qtile start
,但它使 qtile 崩溃。然后,如果我把它放在它后面,脚本就不会被执行。我还设置了 startx 在登录时自动运行。如果从终端正常执行,Python 脚本可以正常工作
这是startx脚本:
#
# ~/.bash_profile
#
#Autostart x
[[ -f ~/.bashrc ]] && . ~/.bashrc
if [ -z "${DISPLAY}" ] && [ "${XDG_VTNR}" -eq 1 ]; then
exec startx
fi
编辑:我想运行的脚本:
import os
import time
import ctypes
import platform
import random
pictures = ["chemical_nord.png","ign_zorin.png","Nordic-Heroin.png","gnu-linux.png","linux-tux.png","nordtheme.png","Abstract-Nord.png","ign_nordhills.png","Minimal-Nord.png","qyqj7y34hlp31.png","archlinux.png","ign_unsplash10.png","nixos.png","waves.jpg"]
def get_wallpaper():
number = random.randint(0,13)
return number
def set_wallpaper():
system_name = platform.system().lower()
path = ''
if system_name == "linux":
number = get_wallpaper()
path = "/home/My_Username/Pictures/"+pictures[number]
command = "feh --bg-max " + path
os.system(command)
if __name__ == "__main__":
while(True):
time.sleep(3600)
set_wallpaper()
如何让它发挥作用?
答案1
为了在启动时触发脚本,您可以通过转到/home/$USER/.config/autostart
并创建一个.desktop
包含以下内容的文件来手动添加它:
[Desktop Entry]
Type=Application
Exec=command you wish execute on startup
Name=Name you wish to provide
Comment=comment to describe what the command does
或者,您可以Startup Application
在 Linux 发行版中打开应用程序(如果可用),并通过提供必要的详细信息来添加条目。
答案2
如果您的脚本依赖于 qtile,您需要在 qtile 之后运行它,并使用 qtile 自动启动。
https://docs.qtile.org/en/latest/manual/config/hooks.html?highlight=autostart#autostart
import os
import subprocess
from libqtile import hook
@hook.subscribe.startup_once
def autostart():
home = os.path.expanduser('~/.config/qtile/autostart.sh')
subprocess.Popen([home])
.xinitrc 中的任何无限循环过程都需要在行尾添加 & ,以便 .xinitrc 无需等待其完成即可恢复。
例如~/.config/qtile/autostart.sh
~/.scripts/my_script.py &