Ubuntu配置开机自启服务

1. 完整的Python程序

首先,创建一个完整的Python程序,用于检测键盘输入1/2/3并启动对应程序:

#!/usr/bin/env python3
import subprocess
import sys
import tty
import termios
from systemd import journal

# 配置要启动的程序
PROGRAM_MAP = {
    '1': ['gedit'],          # 按下1启动文本编辑器
    '2': ['firefox'],        # 按下2启动浏览器
    '3': ['gnome-calculator'] # 按下3启动计算器
}

class KeyboardLauncher:
    def __init__(self):
        # 设置日志记录
        self.logger = journal.sendv
        self.logger('Keyboard launcher service started')
        
    def get_key(self):
        """获取单个按键输入"""
        fd = sys.stdin.fileno()
        old_settings = termios.tcgetattr(fd)
        try:
            tty.setraw(sys.stdin.fileno())
            ch = sys.stdin.read(1)
        finally:
            termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
        return ch

    def launch_program(self, cmd):
        """启动程序"""
        try:
            self.logger(f"Launching program: {' '.join(cmd)}")
            subprocess.Popen(cmd)
            return True
        except Exception as e:
            self.logger(f"Failed to launch program: {str(e)}", priority=journal.LOG_ERR)
            return False

    def run(self):
        """主循环"""
        while True:
            key = self.get_key()
            
            if key == 'q':
                self.logger("Keyboard launcher service stopping")
                break
            elif key in PROGRAM_MAP:
                self.logger(f"Key {key} pressed")
                self.launch_program(PROGRAM_MAP[key])

if __name__ == "__main__":
    launcher = KeyboardLauncher()
    launcher.run()

将上述代码保存为 /usr/local/bin/keyboard_launcher.py,并设置可执行权限:

sudo chmod +x /usr/local/bin/keyboard_launcher.py

2. 创建systemd服务文件

创建一个systemd服务文件,让程序在系统启动时自动运行:

sudo nano /etc/systemd/system/keyboard-launcher.service

内容如下:

[Unit]
Description=Keyboard Launcher Service
After=graphical.target

[Service]
Type=simple
ExecStart=/usr/bin/python3 /usr/local/bin/keyboard_launcher.py
Restart=always
RestartSec=5
User=your_username  # 替换为你的用户名
Environment=DISPLAY=:0
Environment=XAUTHORITY=/home/your_username/.Xauthority

[Install]
WantedBy=multi-user.target

3. 设置和启动服务

  1. 重新加载systemd配置:

sudo systemctl daemon-reload
  1. 启用服务(开机自启):

sudo systemctl enable keyboard-launcher.service
  1. 立即启动服务:

sudo systemctl start keyboard-launcher.service
  1. 检查服务状态:

systemctl status keyboard-launcher.service

4. 查看日志

可以使用journalctl查看服务日志:

journalctl -u keyboard-launcher.service -f

5. 注意事项

  1. ​用户权限​​:确保服务文件中设置了正确的用户名

  2. ​图形环境​​:程序需要访问图形环境,因此设置了DISPLAY和XAUTHORITY环境变量

  3. ​键盘权限​​:如果遇到权限问题,可能需要将用户添加到input组:

sudo usermod -a -G input your_username

然后重启系统

  1. ​程序路径​​:确保PROGRAM_MAP中定义的程序路径在你的系统上存在

6. 自定义配置

你可以通过修改以下部分来自定义程序:

  1. 更改PROGRAM_MAP来设置不同的按键对应不同的程序

  2. 调整systemd服务文件中的RestartSec来改变重启间隔

  3. 可以添加更多错误处理和日志记录

这个方案将创建一个可靠的后台服务,可以随系统启动自动运行,并在后台监听键盘输入,根据按键启动相应的程序。

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容