использование
.zshrc
изменить мои переменные средыЭто - первопричина Вашей проблемы.
.zshrc
файл запуска для интерактивных сессий оболочки. Используйте его, чтобы установить настройки оболочки, не установить переменные среды. Переменные среды обычно устанавливаются в файле сессии такой как.profile
. Посмотрите Альтернативу .bashrc (что идет для.bashrc
также идет для.zshrc
).Если zsh является Вашей оболочкой входа в систему, он не читает
~/.profile
, но это читает~/.zprofile
. Обратите внимание, что zsh не должен быть Вашей оболочкой входа в систему, даже если это - Ваша интерактивная оболочка: можно использовать/bin/sh
как Ваша оболочка входа в систему и наборSHELL=$(command -v zsh)
в Вашей среде так, чтобы эмуляторы терминала и т.п. выполненный zsh. Так как Вы говорите что, определяя Ваши переменные среды в~/.zprofile
не работал, это, вероятно, как Ваша система уже настраивается, но трудно сказать без информации, более точной, что “не работал”.Если Ваша оболочка входа в систему является zsh, вставьте следующую строку Ваш
~/.zprofile
читать.profile
:emulate ksh -c '. ~/.profile'
Можно обычно сходить с рук плоскость
. ~/.profile
, потому что несовместимости между zsh и оболочками стиля Границы вряд ли подойдут в a.profile
.
Если Вы используете systemd
необходимо смочь настроить его как услуга. Я нашел этот поток, который разоблачает подобную задачу установки x11vnc
как услуги Systemd. Поток назван: Индекс» Угол Новичка», как включить x11vnc при запуске с помощью systemd?.
Из комментария в том потоке
Создайте файл: /etc/systemd/system/x11vnc.service
[Unit]
Description=VNC Server for X11
Requires=display-manager.service
After=display-manager.service
[Service]
Type=forking
ExecStart=/usr/bin/x11vnc -norc -forever -shared -bg -rfbauth /etc/x11vnc.pass -allow 192.168.1. -autoport 5900 -o /var/log/x11vnc.log
Создайте файл: /etc/systemd/system/graphical.target
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
[Unit]
Description=Graphical Interface
Documentation=man:systemd.special(7)
Requires=multi-user.target
After=multi-user.target
Conflicts=rescue.target
Wants=display-manager.service
Wants=x11vnc.service
AllowIsolate=yes
[Install]
Alias=default.target
Включите сервис Systemd
$ sudo systemctl enable graphical.target
Это должно создать ссылку как это:
/etc/systemd/system/default.target->/etc/systemd/system/graphical.target
Перезагрузка
Попробуйте:
killall x11vnc && /usr/bin/x11vnc -rfbport 5900 -bg -vncconnect -xvnc -forever
Добавьте любые персонализированные опции.
TLDR:Ответ на то, что вы хотите, представлен здесь с хорошим сервисом типа «не одноразовый»:
На случай, если ты захочешь поиграть, я уже делал это до того, как нашел правильный ответ. Иногда это срабатывало, потому что было неправильно настроено. Если вы используете -bg или любой другой скрипт, который завершает работу сразу после выполнения, он вам понадобится, в противном случае просто перейдите по первой ссылке, чтобы правильно запустить службу x11vnc. Я закончил использовать его, работает идеально.
Рекомендовано:Все, что ниже, только для игры
Прежде всего, вы должны использовать службу Type=oneshot
вместе с RemainAfterExit=yes
, чтобы действие «стоп» сработало. Я боролся, пока не заработал.
Чтобы остановить сервер x11vnc с помощью «отображения», как вы сделаете сvncserver -kill :1
(:1 здесь означает :5901, потому что vnc использует порты 590x по умолчанию ), которые вам нужно использовать в примере lsof
, чтобы получить pid, затем убейте его, изящно или нет, вы выбираете -9 вариант или другой по вашему выбору.
Если вы всегда используете сервис (, то тот же rfbport )с сервисом, вы уже знаете порт прослушивания, так что может быть так:
ExecStop=/bin/bash -c "/bin/kill -9 `lsof -i:5901 -t`"
Поскольку эти параметры принимают только двоичные файлы и не допускают конвейера, вам нужно заключить все внутрьbash -c "command"
Мой выглядит какhttps://gist.github.com/erm3nda/37e5720b4197a7a16c564418d377aac0и не работает при загрузке, но работает при перезагрузке или запуске вручную.
Сервер не будет уничтожен, если вы снова запустите start, но перезагрузка подойдет.
Если вы планируете запустить несколько серверов x11 на разных портах, вы должны добавить @ к имени службы, а затем вызвать с нужным номером и изменить сценарий, чтобы использовать %i в качестве аргумента.
Просто используйте x11vnc@NUMBER для запуска службы:
Имя файла службы :x11vnc@.service Включите его с портом 5901:sudo systemctl enable x11vnc@1
Пример Service ExecStart :/usr/bin/x11vnc -навсегда -общий -bg -rfbport 590%i -дисплей :0 -геометрия 800x600 -rfbauth /etc /x11vnc.pass -слушать 127.0.0$ Пример службы ExecStop :/bin/sh -c "/bin/kill -9 lsof -i:590%i -t
" Запустите его:sudo service x11vnc@1 start
для работы под портом 5901
Мой выглядит какhttps://gist.github.com/erm3nda/fa0bfb8f3737dc6398889adb50fdc84bи не работает при загрузке, но работает, если вы перезапустите его или запустите вручную.
exec 3>/path/to/file; : do something ; exec 3>&-; exec 3>/path/to/another/file ; : ...
---------121 остановка--------180293----Systemctl.... – slm♦ 31.03.2018, 17:11