slackware.ru
http://www.slackware.ru/forum/

rc.keyboard
http://www.slackware.ru/forum/viewtopic.php?f=19&t=2308
Страница 1 из 1

Автор:  Ne01eX [ 30 май 2018 19:59 ]
Заголовок сообщения:  rc.keyboard

0. Я планировал предложить этот скрипт на замену rc.font и rc.keymap, но так как я не нашёл понимания в лице контрибьютеров, а самое главное, майнтейнера Slackware, то полагаю, что этому не бывать, увы. :-( Надеюсь он всё же будет кому-то полезен и я смогу его использовать хотя бы "в своей вилке". :-)

Сам скрипт:

Код:
#!/bin/sh

# /etc/rc.d/rc.keyboard
# There is part Russian Technology Kit GNU/Linux.

# Human-friendly script for setting console font, keyboard map and misc
# Written by Aleksandr "Ne01eX" Sayfulin <Ne01eX@rambler.ru> for
# Russian Technology Kit GNU/Linux
# Copyright 2018 Aleksandr "Ne01eX" Sayfulin <Ne01eX@rambler.ru>
# Distributed under the terms of the GNU General Public License v2.

BSTART="" # set beforestart yellow color
ASTART="" # set afterstart green color
FSTART="" # set failstart red color
NTEXT=""  # set normaltext color

CONFIG="/etc/keyboard.conf"

if [ ! -f $CONFIG ] ; then
  echo "${FSTART}Fail: $CONFIG not found!${NTEXT}"
  CONFIG=/etc/default/keyboard
fi

echo_off() {
    /bin/stty -echo
    /bin/setterm -term linux -msg off
    echo "0" >/proc/sys/kernel/printk
}
echo_on() {
    /bin/setterm -term linux -msg on
    /bin/stty echo
    echo "6" >/proc/sys/kernel/printk
}

# Set console font:
if [ -x /usr/bin/setfont ]; then
  FONT=$(cat $CONFIG | grep -Ev "(^#|^$)" | grep "FONT" | cut -f 2 -d "=")
  FONT=$(echo $FONT | tr -d " " | tr -d "   " | cut -f 1 -d "#")
  if [ -n "$FONT" -a -n $(ls /usr/share/kbd/consolefonts/$FONT*) ] ; then
    echo -n "${BSTART}Set $FONT console font...${NTEXT}"
    echo_off
    /usr/bin/setfont $FONT \
    && echo "${ASTART} [done.]${NTEXT}" || echo "${FSTART} [fail.]${NTEXT}"
    echo_on
  else
    echo "${FSTART}Font /usr/share/kbd/consolefonts/$FONT not found!${NTEXT}"
  fi
else
  echo "${FSTART}/usr/bin/setfont not found!${NTEXT}"
fi

#Loading keymap:
if [ -x /usr/bin/loadkeys ]; then
  KEYMAP=$(cat $CONFIG | grep -Ev "(^#|^$)" | grep "KEYMAP" | cut -f 2 -d "=")
  KEYMAP=$(echo $KEYMAP | tr -d " " | tr -d "   " | cut -f 1 -d "#")
  if [ -n "$KEYMAP" ] ; then
    echo -n "${BSTART}Loading $KEYMAP keymap...${NTEXT}"
    echo_off
    /usr/bin/loadkeys $KEYMAP > /dev/null 2> /dev/null \
    && echo "${ASTART} [done.]${NTEXT}" || echo "${FSTART} [fail.]${NTEXT}"
    echo_on
  else
    echo "${FSTART}Keymap $KEYMAP not found!${NTEXT}"
  fi
else
  echo "${FSTART}/usr/bin/loadkeys not found!${NTEXT}"
fi

NUMBER=1
TTYN=$(cat $CONFIG | grep -Ev "(^#|^$)" | grep "TTYN" | cut -f 2 -d "=")
TTYN=$(echo $TTYN | tr -d " " | tr -d "   " | cut -f 1 -d "#")
if [ $TTYN -gt 6 ] ; then
  TTYN=6
fi
if [ $TTYN -gt 0 -a -n $TTYN ] ; then
  while [ $NUMBER -lt $TTYN ] ; do
    echo -ne "\033%G" > /dev/tty$NUMBER
    (( NUMBER++ ))
  done
  echo "${BSTART}Number of ready-to-use terminals: ${ASTART}${NUMBER}${NTEXT}"
fi



Конфиг (/etc/keyboard.conf или /etc/default/keyboard):

Код:
# /etc/keyboard.conf
# There is part Russian Technology Kit GNU/Linux.

# Human-friendly config file for setting console font, keyboard map and misc
# Written by Aleksandr "Ne01eX" Sayfulin <Ne01eX@rambler.ru> for
# Russian Technology Kit GNU/Linux.
# Copyright 2018 Aleksandr "Ne01eX" Sayfulin <Ne01eX@rambler.ru>
# Distributed under the terms of the GNU General Public License v2.

# Usage : PARAMETER=VALUE
# Or    : PARAMETER = VALUE
# Or    : PARAMETER   =   VALUE

# Set console font:
#FONT   = ter-u16b.psf.gz
FONT   = ter-u16b.psf

# Keymap:
#KEYMAP = ru-ms.map.gz
KEYMAP = ru-ms.map

# Numbers of terminals:
TTYN   = 6 # (from 1 to 6)



В моей "вилке" это собирается вместе с kbd. :-) Если нужно, то приложу сам сборочный скрипт. :-)

Ну и давайте обсудим сам концепт парсинга. Может есть какие дополнения? :-)

Автор:  bormant [ 31 май 2018 09:29 ]
Заголовок сообщения:  Re: rc.keyboard

Автоматизация одноразовой задачи — идея сама по себе странная. Как по мне, так вовсе бесполезная: мне много проще открыть на редактирование пару файлов и вписать по одной строчке, чем прыгать по менюшкам.
Подобное может быть полезно в установщике, но лишние нестандартные конфиги — излишнее неоправданное усложнение.
Все имхо.

Автор:  Ne01eX [ 31 май 2018 13:27 ]
Заголовок сообщения:  Re: rc.keyboard

Не, здесь задача была другая:

1. Отделить настройки от выполняемого скрипта.
2. Не просто подключать файл с настройками, а спарсить его. Всё что не настройки - игнорировать.
3. Сделать всё *nix-way.

На самом деле это открывает возможность дальнейшей модификации системы в целом, но об этом пока рано.

И да, возможно я где-то лукавлю. Собственно, я предлагаю обсудить - всё ли я учёл при парсинге ну и сам подход (пункты 1,2,3). Если всё нормально, то по этой же схеме перепилю другие скрипты. Ну а, смогу ли я добиться включения результатов в ванилу... Про это и про всё остальное будем потом вместе думать... =)

Автор:  bormant [ 31 май 2018 20:15 ]
Заголовок сообщения:  Re: rc.keyboard

Почему не сделать тупо:
Код:
FONT=ter-u16
KEYMAP=ru-ms
Код:
  if [ -r /etc/kb.conf ]; then
    . /etc/kb.conf
  fi
  ...

Автор:  Ne01eX [ 01 июн 2018 04:10 ]
Заголовок сообщения:  Re: rc.keyboard

Потому что в этом случае ничто не помешает дописать в конфиг /etc/kb.conf:

echo "Админ лох!"

И этот конфиг нельзя будет делегировать.

А так можно. :-):

Автор:  bormant [ 01 июн 2018 19:18 ]
Заголовок сообщения:  Re: rc.keyboard

Цитата:
ничто не помешает дописать в конфиг /etc/kb.conf
См. права доступа к файлам.
Цитата:
конфиг нельзя будет делегировать
См. права доступа к файлам. Назначаем отдельную группу, группе даем право на запись, редакторов конфига включаем в группу.


PS. Решение несуществующих проблем -- та еще забава ;-)

Автор:  Ne01eX [ 02 июн 2018 00:30 ]
Заголовок сообщения:  Re: rc.keyboard

Так это в любом случае. :-): Но, что если кто-то из этой группы захочет написать:

echo "Админ - Лох!"

В общем я считаю, что файл с настройками должен вести себя как файл с настройками. А загрузочный скрипт - только как загрузочный скрипт, т.е. вообще не иметь настроек и быть статичным. По возможности.

Разве это плохо?

Хорошо, давайте попробуем зайти с другого бока, - чтобы такого написать, чтобы сломать работу скрипта? ;-)

Автор:  bormant [ 02 июн 2018 10:28 ]
Заголовок сообщения:  Re: rc.keyboard

"Выгрепывание" параметров можно сделать проще:
Код:
KEYMAP=$( grep '^\s*KEYMAP\s*=' $CONFIG | cut -d= -f2 )
...
или
Код:
KEYMAP=$( grep -w '^\s*KEYMAP' $CONFIG | cut -d= -f2 )

Автор:  Ne01eX [ 05 июн 2018 01:16 ]
Заголовок сообщения:  Re: rc.keyboard

Я надеюсь, на этом примере будет нагляднее, - почему именно так:

Код:
#!/bin/sh

# /etc/rc.d/rc.autofs
# There is part Russian Technology Kit GNU/Linux.

# Start/Stop/Restart automount daemon
# Copyright 2015, 2017, 2018 Aleksandr "Ne01eX" Sayfulin <ne01ex@rambler.ru>.
# Distributed under the terms of the GNU General Public License v2.

BSTART="" # set beforestart yellow color
ASTART="" # set afterstart green color
FSTART="" # set failstart red color
NTEXT="" # set normaltext color

DAEMON=/sbin/automount
AUTOMOUNT=`basename $DAEMON`
MODULE="autofs4"
DEVICE="autofs"
CONFIG=/etc/default/autofs


if [ -r $CONFIG ]; then
  USE_MISC_DEVICE=$(cat $CONFIG | grep -Ev "(^#|^$)" | grep "USE_MISC_DEVICE")
  USE_MISC_DEVICE=$(echo $USE_MISC_DEVICE | cut -f 2 -d "=" | tr -d " ")
  USE_MISC_DEVICE=$(echo $USE_MISC_DEVICE | tr -d "   " | cut -f 1 -d "#")
  USE_MISC_DEVICE=$(echo $USE_MISC_DEVICE | tr -d "\"")
  OPTIONS=$(cat $CONFIG | grep -Ev "(^#|^$)" | grep "OPTIONS")
  OPTIONS=$(echo $OPTIONS | cut -f 2 -d "=" | cut -f 1 -d "#" | tr -d "\"")
fi

echo_off() {
    /bin/stty -echo
    /bin/setterm -term linux -msg off
    echo "0" >/proc/sys/kernel/printk
}
echo_on() {
    /bin/setterm -term linux -msg on
    /bin/stty echo
    echo "6" >/proc/sys/kernel/printk
}

autofs_start() {
  # Make sure autofs4 module is loaded
  if ! grep -q autofs /proc/filesystems ; then
    # Try load the autofs4 module fail if we can't
    modprobe $MODULE >/dev/null 2>&1
    echo "${FSTART}Error: failed to load autofs4 module!${NTEXT}"
    exit 1
  elif ([ -f /proc/modules ] && lsmod) | grep -q autofs[^4] ; then
    # wrong autofs filesystem module loaded
    echo
    echo "${FSTART}Error: autofs kernel module is loaded, autofs4 required!${NTEXT}"
    exit 1
  fi
  # Check misc device
  if [ -n "$USE_MISC_DEVICE" -a "x$USE_MISC_DEVICE" = "xyes" ] ; then
    sleep 1
    if [ -e "/proc/misc" ]; then
      MINOR=`cat /proc/misc | grep "$DEVICE" | cut -f 1 -d " "`
      if [ -n "$MINOR" -a ! -c "/dev/$DEVICE" ]; then
        mknod -m 0600 /dev/$DEVICE c 10 $MINOR
      fi
    fi

    # If you using SELinux:
    if [ -x /sbin/restorecon -a -c /dev/$DEVICE ]; then
      /sbin/restorecon /dev/$DEVICE
    fi

  else
    if [ -c /dev/$DEVICE ]; then
      rm /dev/$DEVICE
    fi
  fi

  if [ -x $DAEMON ] ; then
    echo -n "${BSTART}Starting $DAEMON $OPTIONS ...${NTEXT}"
    echo_off
#    $DAEMON $OPTIONS \
#    && echo "${ASTART} [done.]${NTEXT}" || echo "${FSTART} [fail.]${NTEXT}"
#    echo_on
    $DAEMON $OPTIONS \
#    && echo "${ASTART} [done.]${NTEXT}" || echo "${FSTART} [fail.]${NTEXT}"
    echo_on
    echo "${ASTART} [done.]${NTEXT}"
  else
    echo "${FSTART}$DAEMON not found or not executable!${NTEXT}"
    exit 1
  fi
}

autofs_stop() {
  PID=`pidof $AUTOMOUNT`
  COUNT=0
  echo -n "${BSTART}Stopping $AUTOMOUNT daemon...${NTEXT}"
  echo_off
  while [ -n "`pidof $AUTOMOUNT`" -a $COUNT -lt 15 ] ; do
    killall -TERM $AUTOMOUNT >& /dev/null
    [ -z "`pidof $AUTOMOUNT`" ] || sleep 10
    (( COUNT++ ))
  done
  if [ -z "`pidof $AUTOMOUNT`" ] ; then
    echo_on
    echo "${ASTART} [done.]${NTEXT}"
  else
    echo_on
    echo "${FSTART} [fail.]${NTEXT}"
  fi
}

autofs_restart() {
  autofs_stop
  while [ -n "`pidof $AUTOMOUNT`" ] ; do
    sleep 1
  done
  autofs_start
}

autofs_reload() {
  PID=`pidof $AUTOMOUNT`
  if [ -z "$PID" ]; then
    echo "${FSTART}$AUTOMOUNT not running!${NTEXT}"
    exit 1
  else
    echo -n "${BSTART}Reloading maps...${NTEXT}"
    echo_off
    kill -HUP $PID 2> /dev/null
    echo_on
    echo "${ASTART} [done.]${NTEXT}"
  fi
}

autofs_status() {
  PID=`pidof $AUTOMOUNT`
  if [ -n "$PID" ]; then
    echo "${ASTART}$AUTOMOUNT is running as pid ${PID}.${NTEXT}"
  else
    echo "${FSTART}$AUTOMOUNT not running.${NTEXT}"
    exit 1
  fi
}

case "$1" in
  'start')
    autofs_start
  ;;
  'force-start' )
    OPTIONS="$OPTIONS --force"
    autofs_start
  ;;
  'stop' )
    autofs_stop
  ;;
  'restart' )
    autofs_restart
  ;;
  'force-restart' )
    OPTIONS="$OPTIONS --force"
    autofs_restart
  ;;
  'reload' )
    autofs_reload
  ;;
  'status' )
    autofs_status
  ;;
  * )
    START="${ASTART}start${NTEXT}"
    FORCESTART="${ASTART}force-start${NTEXT}"
    STOP="${ASTART}stop${NTEXT}"
    RESTART="${ASTART}restart${NTEXT}"
    FORCERESTART="${ASTART}force-restart${NTEXT}"
    RELOAD="${ASTART}reload${NTEXT}"
    STATUS="${ASTART}status${NTEXT}"
    echo "${BSTART}Usage:${NTEXT} $0 {$START|$FORCESTART|$STOP|$RESTART|$FORCERESTART|$RELOAD|$STATUS}"
esac



Или на вот этом:

Код:
#! /bin/sh

# /etc/rc.d/rc.smartd
# There is part Russian Technology Kit GNU/Linux.

# Start/Stop/Restart S.M.A.R.T. daemon.
# Copyright 2004-2012, 2014, 2015, 2017, 2018 Aleksandr "Ne01eX" Sayfulin <ne01ex@rambler.ru>.
# Distributed under the terms of the GNU General Public License v2.

BSTART="" # set beforestart yellow color
ASTART="" # set afterstart green color
FSTART="" # set failstart red color
NTEXT="" # set normaltext color

CONFIG=/etc/smartd.conf
SMARTD_BIN=/usr/sbin/smartd
PIDFILE=/var/run/smartd/smartd.pid

echo_off() {
    /bin/stty -echo
    /bin/setterm -term linux -msg off
    echo "0" >/proc/sys/kernel/printk
}
echo_on() {
    /bin/setterm -term linux -msg on
    /bin/stty echo
    echo "6" >/proc/sys/kernel/printk
}

if [ ! -f $CONFIG ] ; then
  echo "${FSTART}$CONFIG not found!${NTEXT}"
  exit 1
fi

smartd_start() {
  if [ -x $SMARTD_BIN ] ; then
    SMARTD_OPTS=$(cat $CONFIG | grep -Ev "(^#|^$)" | grep "SMARTD_OPTS")
    SMARTD_OPTS=$(echo $SMARTD_OPTS | cut -f 2- -d "=" | tr -d " " )
    SMARTD_OPTS=$(echo $SMARTD_OPTS | tr -d "   " | cut -f 1 -d "#")
    CMD_SMARTD="$SMARTD_BIN -p $PIDFILE $SMARTD_OPTS"
    echo -n "${BSTART}Starting smartd: $CMD_SMARTD ...${NTEXT}"
    echo_off
    $CMD_SMARTD \
    && echo "${ASTART} [done.]${NTEXT}" || echo "${FSTART} [fail.]${NTEXT}"
    echo_on
  else
    echo "${FSTART}$SMARTD_BIN not found or not executable!${NTEXT}"
  fi
}

smartd_stop() {
  echo -n "${BSTART}Stopping smartd: $SMARTD_BIN ...${NTEXT}"
  echo_off
  if [ -z "$(ps -A | grep $(cat $PIDFILE) | grep -v 'smartd')" ]; then
    kill -TERM $(cat $PIDFILE)
  else
    killall smartd
  fi
  echo_on
  echo "${ASTART} [done.]${NTEXT}"
}

smartd_restart() {
  smartd_stop
  sleep 1
  smartd_start
}

smartd_reload() {
  echo -n "${BSTART}Reloading smartd configuration...${NTEXT}"
  echo_off
  killall -s HUP $SMARTD_BIN
  echo_on
  echo "${ASTART} [done.]${NTEXT}"
}

smartd_report() {
  echo -n "${BSTART}Checking SMART devices now...${NTEXT}"
  echo_off
  killall -s USR1 $SMARTD_BIN
  echo_on
  echo "${ASTART} [done.]${NTEXT}"
}

smartd_status() {
  if pidof $SMARTD_BIN >/dev/null; then
    echo "${ASTART}$SMARTD_BIN is running as pid $(cat $PIDFILE).${NTEXT}"
  else
    echo "${FSTART}$SMARTD_BIN is not running.${NTEXT}"
    exit 1
  fi
}

case "$1" in
  start )
    smartd_start
  ;;
  stop )
    smartd_stop
  ;;
  restart )
    smartd_restart
  ;;
  reload )
    smartd_reload
  ;;
  report )
    smartd_report
  ;;
  status )
    smartd_status
  ;;
  * )
    START="${ASTART}start${NTEXT}"
    STOP="${ASTART}stop${NTEXT}"
    RESTART="${ASTART}restart${NTEXT}"
    RELOAD="${ASTART}reload${NTEXT}"
    REPORT="${ASTART}report${NTEXT}"
    STATUS="${ASTART}status${NTEXT}"
    echo "${BSTART}Usage:${NTEXT} $0 {$START|$STOP|$RESTART|$RELOAD|$REPORT|$STATUS}"
esac


Пока возился с rc.autofs у меня появились сомнения в правильности конструкции:

Код:
bla-bla-bla \
    && echo "${ASTART} [done.]${NTEXT}" || echo "${FSTART} [fail.]${NTEXT}"


Это будет работать не так, как надо и это надо обратно переделать. Ладно, потом. Спать пошёл...

Автор:  bormant [ 05 июн 2018 11:44 ]
Заголовок сообщения:  Re: rc.keyboard

Дело хозяйское.
Но когда за деревьями не видно леса, это плохо. Кстати, именно за подобную скриптовую лапшу ругали SysV Init.

А за это руки можно отрывать с чистой совестью:
Код:
echo_on() {
    /bin/setterm -term linux -msg on
    /bin/stty echo
    echo "6" >/proc/sys/kernel/printk
}
Хотите менять /proc/sys/kernel/printk, сперва сохраните исходное значение.
Не у всех там первая "6". У тех, кто передал ядру параметр "quiet", там "3 4 1 7", и ваше принудительное "6" им вредно.

Я понимаю, почему вы это делаете именно так -- душа просит прекрасного, новогодняя елка привнесет праздник в каждый день. Но по-прежнему не вижу в этом никакого смысла -- весь пар уходит в свисток.


Всё сказанное выше -- сугубо ИМХО, никого не пытаюсь поучить, своего мнения никому не навязываю, просто делюсь впечатлением.

Автор:  bormant [ 05 июн 2018 14:10 ]
Заголовок сообщения:  Re: rc.keyboard

Ах да, до тех пор, пока существует /etc/rc.d/rc.inet1 с его
Код:
# Get the configuration information from /etc/rc.d/rc.inet1.conf:
. /etc/rc.d/rc.inet1.conf
возможность написать "echo Админ лох!!!" не должна сильно беспокоить...

Автор:  Ne01eX [ 06 июн 2018 12:45 ]
Заголовок сообщения:  Re: rc.keyboard

Дело хозяйское.
Но когда за деревьями не видно леса, это плохо. Кстати, именно за подобную скриптовую лапшу ругали SysV Init.

А за это руки можно отрывать с чистой совестью:
Код:
echo_on() {
    /bin/setterm -term linux -msg on
    /bin/stty echo
    echo "6" >/proc/sys/kernel/printk
}
Хотите менять /proc/sys/kernel/printk, сперва сохраните исходное значение.
Не у всех там первая "6". У тех, кто передал ядру параметр "quiet", там "3 4 1 7", и ваше принудительное "6" им вредно.

Я понимаю, почему вы это делаете именно так -- душа просит прекрасного, новогодняя елка привнесет праздник в каждый день. Но по-прежнему не вижу в этом никакого смысла -- весь пар уходит в свисток.


Всё сказанное выше -- сугубо ИМХО, никого не пытаюсь поучить, своего мнения никому не навязываю, просто делюсь впечатлением.


echo_on и echo_off не менялись со времён RTK 0.7. :smu:sche_nie: Собственно, этот хинт был взят из ddk времён kernel 2.6. Может даже и 2.5.х :-D Тогда это работало на все 100%.
Признаю, косяк, надо будет поправить :-).

А вообще, у меня была мысль со временем разделить логгирование на несколько этапов. Ну то есть не давить вывод, а перенаправлять его в файлы. Но так как я пока ещё вообще не думал как это лучше сделать, а на LQ меня вообще забанили, то пока просто давлю. :-)

Пока мыслей ровно 2:
один скрипт - один лог;
режим - лог.

Ещё была [s]крайне вредная[/s] мысль, - вынести все загрузочные скрипты в отдельный пакадж, как это сделано в LFS, но её я пока отогнал. :-)

Автор:  Ne01eX [ 10 июн 2018 11:50 ]
Заголовок сообщения:  Re: rc.keyboard

Возвращаясь к функциям echo_off и echo_on. Да, вроде, верно всё. Пока возился, вынес их в /etc/rc.d/init.d/rtk-functions. Скрипя сердцем, если честно, но в данном случае разделение кода оправдано.

На всякий случай вот текущая (актуальная) таблица значений:

0 (KERN_EMERG) system is unusable
1 (KERN_ALERT) action must be taken immediately
2 (KERN_CRIT) critical conditions
3 (KERN_ERR) error conditions
4 (KERN_WARNING) warning conditions
5 (KERN_NOTICE) normal but significant condition
6 (KERN_INFO) informational
7 (KERN_DEBUG) debug-level messages

Того же результата можно добится, передав ядру loglevel=N. Бонусом можно передать mminit_loglevel=N . Может принимать одно из трёх значений:

0 - Не выводить лог проверки памяти.
4 - Нормальный режим.
8 - Дебаг.

Хотя это не важно. :-):

В текущем виде /etc/rc.d/init.d/rtk-functions выглядит так:

Код:
#!/bin/sh

# /etc/rc.d/init.d/rtk-functions
# There is part Russian Technology Kit GNU/Linux.

# Extra functions for rc-scripts
# Copyright 2004-2012, 2014, 2015, 2017, 2018 Aleksandr "Ne01eX" Sayfulin <ne01ex@rambler.ru>.
# Distributed under the terms of the GNU General Public License v2.

if [ -z "$PATH" ] ; then
  export PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
fi

echo_off() {
    /bin/stty -echo
    /bin/setterm -term linux -msg off
#    SAVED_PRINTK="$(cat /proc/sys/kernel/printk | cut -f1)"
    echo "off" > /proc/sys/kernel/printk_devkmsg
    echo "1" > /proc/sys/kernel/printk
}

echo_on() {
    echo "ratelimit" > /proc/sys/kernel/printk_devkmsg
#    echo "$SAVED_PRINTK" > /proc/sys/kernel/printk
    echo "6" > /proc/sys/kernel/printk
    /bin/stty echo
    /bin/setterm -term linux -msg on
}



Хотя, как показывает практика, при передаче "0" напрямую в /proc/sys/kernel/printk, по факту там всегда будет "1". Я ещё не лазил в код ядра и не знаю почему так. :ne_vi_del:

P.S. Информация приведена согласно документации к ядру 4.14.x, проверена на ядре 4.16.x. Если я по-прежнему где-то не прав, то прошу поправить. :smu:sche_nie:

P.P.S /proc/sys/kernel/printk_devkmsg появилось только в 4.8.x. С более старыми ядрами лучше закомментировать от греха подальше.
---
[right]
Unheilig - Neuland.
[/right]

Автор:  bormant [ 10 июн 2018 17:16 ]
Заголовок сообщения:  Re: rc.keyboard

Возвращаясь к функциям echo_off и echo_on. Да, вроде, верно всё.

... поскипано ...

Если я по-прежнему где-то не прав, то прошу поправить. :smu:sche_nie:

Хотите менять /proc/sys/kernel/printk, сперва сохраните исходное значение.
Не у всех там первая "6". У тех, кто передал ядру параметр "quiet", там "3 4 1 7", и ваше принудительное "6" им вредно.

Автор:  Ne01eX [ 13 июн 2018 21:33 ]
Заголовок сообщения:  Re: rc.keyboard

Нет. Всё же вы категорически неправы. Я пре/переопределяю только тех, кого переопределяю. И в принципе не могу переопределить тех, кто выставляет этот массив сам. А потому я до сих пор не понимаю вашего волнения. Либо тыкните меня как котёнка носом, либо признайте свою неправоту... :-\

Ну, блин, всё же по доке сделано... :-\

---
[right]
Ленинград - Вояж
[/right]

Автор:  bormant [ 14 июн 2018 12:00 ]
Заголовок сообщения:  Re: rc.keyboard

Дело в том, что /proc/sys/kernel/printk -- общий, влияет на поведение ядра в части вывода им диагностических сообщений в зависимости от их уровня.
Проблемы две:
1) Система, в отличии от MS_DOS, многозадачная, задавив уровень информативности сообщений, это действие отразится на всех процессах системы, не только на том, откуда был сделан вызов.
2) Умолчальное значение printk вовсе не 6. Точнее, оно может быть изменено при помощи параметров ядра quiet и loglevel=N. Очевидно, если администратор системы поменял дефолтное значение loglevel, то он ожидает предсказуемого поведения системы (и соответствующего наполнения журналов) -- значение останется таким, которым его задали. Даже сохранение исходного значения не сильно помогает в целом -- один неверный по вложенности вызов echo_off/echo_on, и SAVED_PRINTK получит "1" -- опять "пропали все полимеры".

То есть, в данном конкретном случае от echo_on/echo_off больше вреда, нежели пользы. ИМХО.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/