Решение, которое я успешно использовал в debian, ubuntu и rhel7, заключается в создании короткого скрипта python, который запускается автоматически при входе в сессию gnome. Обратите внимание, что в rhel7 комбинация клавиш для блокировки - super + l.
Создайте /etc/xdg/autostart/gscreenlock.py вот так:
#!/usr/bin/python
import dbus
import dbus.service
import dbus.glib
import gobject
import os
class ScreenDbusObj(dbus.service.Object):
def __init__(self):
session_bus = dbus.SessionBus()
bus_name=dbus.service.BusName("org.gnome.ScreenSaver",bus=session_bus)
dbus.service.Object.__init__(self,bus_name, '/org/gnome/ScreenSaver')
@dbus.service.method("org.gnome.ScreenSaver")
def Lock(self):
os.system( "xscreensaver-command -lock" )
if __name__ == '__main__':
object=ScreenDbusObj()
gobject.MainLoop().run()
Затем сделайте его исполняемым:
chmod a+rx /etc/xdg/autostart/gscreenlock.py
И отредактируйте /etc/xdg/autostart/gscreenlock. desktop вот так:
[Desktop Entry]
Type=Application
Encoding=UTF-8
Name=gscreenlock
TryExec=/etc/xdg/autostart/gscreenlock.py
Exec=/etc/xdg/autostart/gscreenlock.py
NoDisplay=true
NotShowIn=XFCE;KDE;
Comment=Allows screen locking in gnome
Возможно, эквивалент udev
(eudev
илиmdev
согласно Devuan)не ведет себя на 100 % одинаково в отношении событий горячего подключения. Также возможно, если вы используете коммутатор, который имеет очень большую задержку переадресации, прежде чем фактически разрешить трафику работать в обоих направлениях (, в этом случае второе решение ниже не будет работать ).
В любом случае, если вы хотите, чтобы интерфейс был ненастроенным, это должно быть довольно просто. Вот два или три предложения от самого простого к более сложному:
исключить интерфейс из конфигурации
1.1. просто измените настройки сети по умолчанию в/etc/default/networking
:
либо
CONFIGURE_INTERFACES=no
это несколько экстремально, так как даже lo
не будет запущено, что, возможно, не позволит даже некоторым несетевым -приложениям работать должным образом (gdm... ).
1.2. или
EXCLUDE_INTERFACES=eth0
, чтобы исключить только проблемный интерфейс.
Позже вы можете использовать ifup eth0
, чтобы вызвать его.
Или вместо этого вы можете добавить условие в конфигурацию, чтобы проверить, доступна ли ссылка,и "сбой" интерфейса, если нет. Поскольку я не уверен, запускается ли хук dhcp
до или после того, как пользователь -предоставил команды up
, я обманываю и помещаю его в pre-up
, что требует предварительного запуска интерфейса вручную. Вы можете проверить, достаточно ли хороша команда up
, не вызывая ее сначала.
Отредактируйте соответствующую часть /etc/network/interfaces
, чтобы она выглядела так:
allow-hotplug eth0
iface eth0 inet dhcp
pre-up ip link set eth0 up && sleep 1
pre-up [ $(cat /sys/class/net/eth0/carrier) -eq 1 ]
iface eth0 inet6 auto
pre-up ip link set eth0 up && sleep 1
pre-up [ $(cat /sys/class/net/eth0/carrier) -eq 1 ]
(скорее всего не нужен для настроек ipv6, это наверное экономит 1с. Вы можете даже удалить весь раздел inet6, если не заинтересованы)
Возвращаемый результат теста заставит ifup
считать конфигурацию неудачной и оставит логическую(ifupdown
точку зрения )состояния карты отключенной.
Затем вы можете ввести ifup eth0
или service networking restart
позже, после подключения кабеля.