Estou tentando fazer com que o Ubuntu 20.04 LTS ("Focal Fossa") mude automaticamente para o tema da janela "claro" às 06:00 (6h) todas as manhãs e o tema da janela "escuro" às 18h (18h) todas as noites.
O seguinte comando do Terminal pode ser usado para mudar para o tema da janela "light":
gsettings set org.gnome.desktop.interface gtk-theme Yaru-light
O seguinte comando do Terminal pode ser usado para mudar para o tema da janela "escuro":
gsettings set org.gnome.desktop.interface gtk-theme Yaru-dark
Mas, como mencionado acima, gostaria de automatizar esse processo.
A primeira sugestão apresentada a mim foi por meio de um cron job, no entanto, isso repetidamente se mostrou malsucedido, então outro usuário sugeriu uma abordagem mais "moderna", via "timers" do Systemd ... Infelizmente, não estou familiarizado com o Systemd e o processo de criação temporizadores, então eu tenho aprendido à medida que vou, sem sucesso até o momento.
Neste momento, tenho seis arquivos na minha pasta "home":
- dark.service
- dark.timer
- dark.sh
- luz.serviço
- luz.temporizador
- light.sh
O conteúdo de "dark.service" é:
[Unit]
Description=Automatically change the "Window Theme" to "dark" in the evening.
[Service]
ExecStart=/home/gregory/dark.sh
[Install]
WantedBy=dark.sh
O conteúdo do dark.timer é:
[Unit]
Description=Automatically change the "Window Theme" to "dark" in the evening.
[Timer]
OnCalendar=*-*-* 18:00:00
Persistent=true
[Install]
WantedBy=dark.service
O conteúdo de "dark.sh" é:
export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
gsettings set org.gnome.desktop.interface gtk-theme Yaru-dark
O conteúdo de "light.service" é:
[Unit]
Description=Automatically change the "Window Theme" to "light" in the morning.
[Service]
ExecStart=/home/gregory/light.sh
[Install]
WantedBy=light.sh
O conteúdo de "light.timer" é:
[Unit]
Description=Automatically change the "Window Theme" to "light" in the morning.
[Timer]
OnCalendar=*-*-* 06:00:00
Persistent=true
[Install]
WantedBy=light.service
O conteúdo de "light.sh" é:
export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
gsettings set org.gnome.desktop.interface gtk-theme Yaru-light
Eu usei "Startup Application Preferences" ( gnome-session-properties
) para executar "light.timer" e "dark.timer" no login.
Com base nos conselhos que recebi em outros lugares e no que li on-line, acho que criar "temporizadores" via Systemd é provavelmente a abordagem certa para alcançar o que quero (troca automática entre temas de janela "claros" e "escuros", com base em a hora do dia)... Eu só preciso de uma ajudinha para fazer as coisas funcionarem, pois Systemd, temporizadores e scripts são um mundo totalmente novo para mim.
(Edição tardia de
WantedBy=default.service
paraWantedBy=default.target
)Esta pode ser uma longa jornada, mas aqui estão algumas dicas. Todas as
WantedBy
entradas estão erradas. Eles não podem depender de um script de shell. Uma unidade de temporizadorx.timer
está sempre associada a uma unidade de serviçox.service
. Se você fosse aosstart
temporizadores, eles iniciariam o serviço no horário determinado. Mas você precisaria fazer isso em cada login. Então, em vez disso, você precisa habilitar os temporizadores e fazer com que o systemd os inicie automaticamente. Para fazer isso, você precisa ter os temporizadoresWantedBy=
como uma meta que é cumprida no login para os usuários. Normalmente, isso édefault.target
. Embora existam muitos destinos de sistema, há muito poucos destinos de usuário.Como seus scripts são muito curtos, talvez você queira incluí-los nas unidades de serviço, para manter as coisas menores. Os arquivos de serviço e timer devem estar em ~/config/systemd/user/. Você precisa criar este diretório se ele não existir. Por exemplo: dark.service:
dark.timer:
luz.serviço:
luz.temporizador:
Sempre que você alterar o conteúdo desses arquivos, ou adicionar ou remover arquivos deste diretório, você precisa notificar o systemd dando o comando:
Não tenho certeza do que o gnome "Preferências do aplicativo de inicialização" faz. O método systemd para começar a usar essas unidades é fazer, apenas uma vez, não como root:
Agora, sempre que você fizer login, essas unidades serão iniciadas e interrompidas quando você sair.
Ao desenvolver as unidades, você pode testá-las imediatamente, sem precisar fazer login/logout. Você pode iniciá-los explicitamente com:
e você pode pará-los com
Você precisa pará-los antes de poder iniciá-los novamente. Você pode combinar parar e começar com
Você pode verificar seu status com
que deve dizer quando eles serão acionados novamente e qual serviço eles serão executados.
Seria bom ter um tutorial sobre systemd unidades de usuário do systemd , mas não encontrei nada adequado. Eles falam principalmente sobre unidades do sistema . Você pode obter algumas noções básicas deste grande documento redhat , mas é para administradores, então um pouco detalhado demais, mas ajudaria a entender que algumas delas são comuns para unidades de usuário.