标签: minecraft

使用 systemd 启动/关闭 Minecraft 服务器

我一直在运行带有 sysV init 脚本的 Minecraft 服务器。这是一个非常好的脚本;它在“屏幕”中运行 Minecraft;它可以确保 Minecraft 永远不会启动两次;它会等待 Minecraft 在停止时关闭。它甚至可以向 Minecraft 传递命令/etc/init.d/minecraft command <command>——这对于计划备份很有用。

现在我已经升级到 Debian Jessie,它有 systemd。但是现在,我保留我的旧式脚本,因为它很棒。尽管如此,我实际上非常支持 systemd - 它看起来确实有很多改进、简化和集中化。我记得 systemd 开发人员承诺“旧的 sysV 脚本会像以前一样工作”,但事实证明这并不容易!

我记得之前有一些启动脚本有问题;显然,仅仅将脚本放入 /etc/init.d 并将其标记为可执行已经不够了 - 我必须“启用”它们才能使它们工作。“好吧,”我想,“现在它被 systemd 识别了,现在我可以通过 systemctl 来控制它——它可能应该只使用我的旧脚本来处理命令!” 事实证明我错了。

它不能正常启动,不能正常停止,不能正常显示状态,更不用说缺少“命令”命令了。我已经开始寻找有关 systemd 如何比 sysV 更好的信息,以及我可以做些什么来简化和增强一切。显然, systemctl 只是自己制作了最简单的单元文件,希望它就足够了!现在我想知道 systemd 是否真的无法处理如此复杂的情况!

我看到一个普通的 systemd 服务基本上由一些要求和 ExecStart 组成。就像 systemd 需要监视守护进程一样。输入条件和可执行文件名称,systemd 将处理它的启动、停止以及其他事情。但是没那么容易!!你不能只是杀死 Minecraft 的 PID(更不用说它与屏幕的 PID 不同)!我想为每个动作编写更复杂的脚本,甚至可能添加像“命令”这样的新动作(好吧,我已经接受了这可能根本不可能)。对于“状态”,它必须监视 Java 进程,对于停止,它必须向 Minecraft 控制台发送命令,然后等待 Java 和屏幕都死掉!我还想确保 systemd 不会只是尝试 SIGHUP 或 SIGINT 或 SIGTERM 它!

那么,真正允许我们利用 systemd 为我们提供的所有“改进”和“简化”的巧妙、现代、“预期的 systemd 方式”是什么?当然,它应该能够处理比在一行中启动并用 SIGINT …

debian systemd minecraft

8
推荐指数
2
解决办法
2万
查看次数

应用程序释放鼠标时如何避免在使用 xinput 坐标变换矩阵时鼠标光标跳跃

我有一些需要降低灵敏度的高灵敏度鼠标。对此的一般解决方案似乎是将坐标变换矩阵设置为可接受的值。所以我使用以下值:

xinput --set-prop 19 'Coordinate Transformation Matrix' 0.25 0 0  0 0.25 0  0 0 1
Run Code Online (Sandbox Code Playgroud)

这很好用,除了我终于意识到它在玩我的世界时给我带来了问题。发生的情况是,当我按下任何让我返回光标的键时,只要我移动鼠标,光标就会跳到屏幕的左上象限。确切位置与我使用的缩放数字成正比,因此 0.25 将光标移近角而不是 0.45。此外,如果我使用大于 1 的值,光标将移动到显示器的不同象限。当然,值为 1 时,光标会按预期留在屏幕中央。这仅发生在第一次鼠标输入时,之后鼠标行为正常。

我需要有关如何避免这种光标移动的建议。这很令人抓狂。我也不认为这严格来说是 minecraft 问题,我怀疑它发生在其他获取和释放鼠标光标的 Java 应用程序中。

更多信息,我的机器正在运行 Kubuntu 18.04 和 openJDK 10.0.2。

编辑:添加更多信息。在我的正常工作流程中,我开始在其他地方注意到这种行为。不清楚何时,但可能与 KDE 如何处理鼠标事件和窗口焦点有关。我使用跟随鼠标 - 鼠标优先。

kde java mouse xinput minecraft

7
推荐指数
1
解决办法
827
查看次数

我应该如何设置 systemd 服务来自动启动服务器并让我向其传递命令?

目标:

\n

我正在尝试让 Minecraft 服务器在 Fedora 上使用 systemd 在计算机启动时运行。我有一些自我强加的标准,我需要满足这些标准才能正确管理我的服务器:

\n
    \n
  1. 它必须以minecraft我使用主目录创建的系统用户身份运行/opt/minecraft。我尝试通过addusering 然后添加行User=minecraftWorkingDirectory=/opt/minecraft/
  2. \n
  3. 它必须是可扩展的并且可以与任意数量的服务器一起工作。我尝试使用模板服务,然后将行更改WorkingDirectoryWorkingDirectory=/opt/minecraft/%i让我传入目录。
  4. \n
  5. 我必须能够以某种方式将命令传递给它。这就是我所坚持的。我尝试过使用插座单元,然后将其连接到/run/minecraft%I,但我无法让它工作。如果您不熟悉 Minecraft 服务器,他们有一个交互式控制台,您可以将命令传递到其中。过去,我使用过在会话tmux send中运行的服务器tmux,但问题是它不会自动启动并且感觉不优雅。
  6. \n
\n

尝试的解决方案:

\n

/usr/local/lib/systemd/system/minecraft@.service:

\n
[Unit]\nDescription=Minecraft server: %i\n\n# only run after networking is ready\nAfter=network-online.target\nWants=network-online.target\n\n[Service]\nType=simple\n\n# restart if the server crashes\nRestart=on-failure\nRestartSec=5s\n\n# set the input and outputs to a socket unit and the journal resp.\nSockets=minecraft@%i.socket\nStandardInput=socket                     \nStandardOutput=journal\nStandardError=journal\n\n# set the user and directory to …
Run Code Online (Sandbox Code Playgroud)

fedora systemd fifo minecraft

5
推荐指数
1
解决办法
1438
查看次数

标签 统计

minecraft ×3

systemd ×2

debian ×1

fedora ×1

fifo ×1

java ×1

kde ×1

mouse ×1

xinput ×1