我需要帮助让 crontab 在 Xubuntu 16.04.6 中运行

我需要帮助让 crontab 在 Xubuntu 16.04.6 中运行

我已经设置了这样的 crontab 任务:

@reboot  xmodmap -e \"keycode 105=Delete\"
@reboot  xmodmap -e \"keycode 66=Home\"

并保存在 NANO ( ) 建议的默认目录中/tmp/..../.../cron,但它不起作用。我可以列出 cron 作业,cron 服务正在运行,输出journalctl -b 0 _SYSTEMD_UNIT=cron.service显示没有错误的作业等等。除此之外,我也无法在启动时运行脚本:@reboot /home/user/scripts/myscript.sh

为什么cron没有按照我预期的那样工作?

答案1

xmodmap 修改当前会话的键码映射。因此,如果您在 crontab 中运行它,它会打开一个会话,修改映射并再次关闭该会话 - 其效果就消失了。

您应该在您的配置文件中运行 xmodmap 命令$HOME/.profile(或者,$HOME/.xinitrc如果您仅在登录时启动 X 会话,则在您的配置文件中运行 xmodmap 命令)。

man xmodmap说:

它通常从用户的会话启动脚本运行,以根据个人喜好配置键盘。

答案2

看一眼man cron或 Internet 上的其他示例。我认为您遇到的问题是没有使用二进制文件的完整路径。

| melon@pc ~>$ which xmodmap
/usr/bin/xmodmap

在你的 中,你会放入 ,cron -e而不是。xmodmap/usr/bin/xmodmap

但是,即使有这种变化,您也不会看到任何关键的变化。


Linux 的优点在于它提供了各种问题解决方案,但请研究其他人如何解决类似问题。例如,xmodmap通常在中调用.xinitrc,它会在您的 X 会话启动时执行。 xmodmap实际上不会按您尝试的方式工作,至少对于您的普通用户来说是这样。

既然你感兴趣xmodmap,我建议你看看文档和示例并完全忘记cron当前这个问题。

如果您不愿意查看文档和其他示例,或者想要真正了解事物的工作原理,您可以查阅以下页面man

XMODMAP(1)                            General Commands Manual                            XMODMAP(1)

NAME
       xmodmap - utility for modifying keymaps and pointer button mappings in X

SYNOPSIS
       xmodmap [-options ...] [filename]

DESCRIPTION
       The  xmodmap  program is used to edit and display the keyboard modifier map and keymap table
       that are used by client applications to convert event keycodes into keysyms.  It is  usually
       run  from  the user's session startup script to configure the keyboard according to personal
       tastes.

最后一句话回答了你的问题。

此时,您不知道cron它是否不起作用(这是您的怀疑),或者是否xmodmap被触发,但您看不到效果。后者是可能的情况。您的用户需要xmodmap在当前 X 会话中执行才能xmodmap使更改生效。


一旦你在xmodmap没有 的情况下工作cron,你就可以解决下一个问题。如前所述,你需要完整的系统路径,但你还需要告诉cron 如何运行文件。您只是指向了文件,它在您的终端上运行,因为它使用了 shebang/解释器(即:)#!/bin/bash。因此,要cron运行bash文件...

| melon@nifflheim ~>$ which bash
/usr/bin/bash
| melon@nifflheim ~>$ crontab -e
...
@reboot /usr/bin/bash /home/user/scripts/myscript.sh

但是,你真的想root运行在用户目录中找到的脚本吗?根据你目前所学的知识,也许你可以添加/usr/bin/bash /home/user/scripts/myscript.sh(或source它)~/.xinitrc^_~。

相关内容