AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 1237805
Accepted
Gregory Opera
Gregory Opera
Asked: 2020-05-11 03:41:18 +0800 CST2020-05-11 03:41:18 +0800 CST 2020-05-11 03:41:18 +0800 CST

Ajuda com a criação de timers do Systemd para automatizar as alterações do tema da janela

  • 772

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.

gnome themes systemd gnome-shell
  • 1 1 respostas
  • 589 Views

1 respostas

  • Voted
  1. Best Answer
    meuh
    2020-05-12T04:39:45+08:002020-05-12T04:39:45+08:00

    (Edição tardia de WantedBy=default.servicepara WantedBy=default.target)

    Esta pode ser uma longa jornada, mas aqui estão algumas dicas. Todas as WantedByentradas estão erradas. Eles não podem depender de um script de shell. Uma unidade de temporizador x.timerestá sempre associada a uma unidade de serviço x.service. Se você fosse aos starttemporizadores, 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 temporizadores WantedBy=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:

    [Unit]
    Description=Automatically change the "Window Theme" to "dark" in the evening.
    [Service]
    Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
    ExecStart=/usr/bin/gsettings set org.gnome.desktop.interface gtk-theme Yaru-dark
    

    dark.timer:

    [Unit]
    Description=Automatically change the "Window Theme" to "dark" in the evening.
    [Timer]
    OnCalendar=*-*-* 18:00:00
    Persistent=true
    [Install]
    WantedBy=default.target
    

    luz.serviço:

    [Unit]
    Description=Automatically change the "Window Theme" to "light" in the morning.
    [Service]
    Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
    ExecStart=/usr/bin/gsettings set org.gnome.desktop.interface gtk-theme Yaru-light
    

    luz.temporizador:

    [Unit]
    Description=Automatically change the "Window Theme" to "light" in the morning.
    [Timer]
    OnCalendar=*-*-* 06:00:00
    Persistent=true
    [Install]
    WantedBy=default.target
    

    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:

    systemctl --user daemon-reload
    

    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:

    systemctl --user enable dark.timer light.timer
    

    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:

    systemctl --user start dark.timer light.timer
    

    e você pode pará-los com

    systemctl --user stop dark.timer light.timer
    

    Você precisa pará-los antes de poder iniciá-los novamente. Você pode combinar parar e começar com

    systemctl --user restart dark.timer light.timer
    

    Você pode verificar seu status com

    systemctl --user list-timers
    

    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.

    • 2

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve