LINUX.ORG.RU

Сообщения rumly111

 

Пакеты, удалённые из репозиториев

Форум — General

Бывает, хочу установить утилиту, а её удалили из репозитория. Раньше она там была, но, видимо, нету мейнтейнеров, чтобы поддерживать. И так с многими непопулярными пакетами, часто полезными маленькими утилитами или игрульками. Остаётся только вздыхать и собирать из исходников. Вот только на днях узнал, что в Debian Buster нету NetSurf .

Сколько полезных утилиток так кануло в неизвестность? Если с вами случалось подобное, поделитесь болью. Может узнаем про какие-то прикольные тулзы или игрушки.

П.С.: У меня твёрная уверенность в том, что bsd-games будут собирать и через 100 лет на квантовых компьютерах хД

 ,

rumly111 ()

Как подружить KolibriOS с видеокартой Radeon?

Форум — Talks

В Колибри есть возможность загрузить линуксовый драйвер radeon, но у меня он не работает.

Ноутбук Asus K53U.

$ lspci | grep -i vga
00:01.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Wrestler [Radeon HD 6310]

Всяко пробовал запускать atikms, с разными комбинациями ключей, в результате или ничего не случается, или чёрный экран и приходится перезагружаться. Вот лог atikms , а вот часть dmesg из линукса.

 ,

rumly111 ()

Как запускать русские TADS-игры?

Форум — Games

Если использовать RTADS через wine, то всё работает. Но frobtads показывает знаки вопросов там, где символы кириллицы (https://imgur.com/a/hrShHxD). Вот как я пробовал:

frob deepr.gam
frob -k cp1251 deepr.gam
LANG=ru_RU.CP1251 frob deepr.gam
LANG=ru_RU.CP1251 frob -k cp1251 deepr.gam

Ни один вариант не работает. Обычно у меня локаль en_US.UTF-8, но ru_RU.CP1251 тоже сгенерирована.

 , , ,

rumly111 ()

Простой скрипт для последовательной загрузки файлов в Transmission

Форум — Desktop

https://gist.github.com/rumly111/bf89f3053ee122996291513e3f16c608

Написал простой скрипт, который мониторит Transmission, и если есть текущие загрузки, расставляет приоритеты файлов так, чтобы первым загрузился первый файл в алфавитном порядке, потом второй и.т.д.

 , , ,

rumly111 ()

Как прозрачно объединить tinc и «обычную» сеть?

Форум — Admin

Есть две сети - домашняя WiFi-сеть (10.0.0.0/16), с обычным беспроводным роутером, так же в ней RaspberryPi с запущеным tincd. Хотелось бы, чтобы при подключении к «обычной» сети было видно и адреса из VPN. В идеале - прозрачно объединить две сети. Основная цель - чтобы smart tv (на который tincd не поставить) смог определять DLNA, которые находятся в VPN-сети.

Что я до этого пробовал? Пробовал присваивать IP-адреса в VPN сети вроде 10.0.0.0/8 и 10.0.0.0/24, то есть маски отличаются от локальной сети. Читал о таком на сайте tinc-vpn.org , но толком не разобрался, как это работает. Так же пробовал arp proxy (parprouted), но вроде так не работает broadcast/multicast, а без этого DLNA-сервер в сети не найдётся.

Ещё вариант - на Raspberry пробрасывать DLNA порт 8200 из VPN-сети в локальную. Кстати, если DLNA бежит на отличном от 8200 порту, он опредилится телевизором?

Какие у вас идеи?

 , , , ,

rumly111 ()

Простой скрипт для предотвращения ухода компа в сон

Форум — Desktop

Сделал под свои нужды. Никаких конфигов, параметров командной строки итд :-) Хотите - берите, хотите - не берите.

Скрипт срабатывает при сетевой активности (upload+download > 50Mb / 5min), дисковой активности (IO > 25Mb/min), и активности процессора.

#!/usr/bin/env python3

'''
Monitor network traffic, disk I/O and CPU usage.
If they excel some given values, prevent computer from suspending.

Author: Joseph Botosh <rumly111@gmail.com>

License: GPLv2
'''

import time
import dbus
import logging


def int_from_file(fn : str) -> int:
    with open(fn, 'rt') as f:
        return int(f.readline())


class IntFile:
    def __init__(self, fname):
        self.fname = fname
        self._last = None
        self.history = []

    def update(self):
        n = int_from_file(self.fname)
        if self._last is not None:
            self.history.append(n - self._last)
        self._last = n
        if len(self.history) > 7200:
            self.history = self.history[3600:]

    def total(self, period: int):
        return sum(self.history[-period:])


class CpuInfo:
    def __init__(self):
        self._prevstats = None
        self.history = [0]

    def update(self):
        stats = []
        with open('/proc/stat', 'rt') as f:
            for l in f.readlines():
                stats = l.split()
                if stats[0] == 'cpu':
                    break

        stats = [float(s) for s in stats[1:]]
        # https://stackoverflow.com/questions/23367857/accurate-calculation-of-cpu-usage-given-in-percentage-in-linux
        user,nice,system,idle,iowait,irq,softrig,steal,_,_ = stats
        Idle = idle + iowait
        NonIdle = user + nice + system + irq + softrig + steal
        Total = Idle + NonIdle

        if self._prevstats is not None:
            ps = self._prevstats
            cpu_perc = (NonIdle - ps['NonIdle']) / (Total - ps['Total']) * 100
            self.history.append(cpu_perc)
            
        self._prevstats = {'Total':Total, 'Idle':Idle, 'NonIdle':NonIdle}

        if len(self.history) > 7200:
            self.history = self.history[3600:]

    def average(self, period : int):
        return sum(self.history[-period:]) / min(len(self.history) or 1, period)


class DiskIO:
    def __init__(self):
        self.history = [0]
        self._prevstats = None

    def update(self):
        stats = []
        with open('/proc/diskstats', 'rt') as f:
            for l in f.readlines():
                stats = l.split()
                if stats[2] == 'sda':
                    break

        stats = [int(s) for s in stats[3:]]

        read_bytes = stats[2] * 512
        write_bytes = stats[6] * 512

        if self._prevstats is not None:
            ps = self._prevstats
            diskio_rw = (read_bytes - ps['read']) + (write_bytes - ps['write'])
            self.history.append(diskio_rw)

        self._prevstats = {'read':read_bytes, 'write':write_bytes}
        
        if len(self.history) > 7200:
            self.history = self.history[3600:]

    def total(self, period : int):
        return sum(self.history[-period:])


class SuspendInhibitor:
    def __init__(self, dbus_iface : dbus.Interface):
        self.__cookie = 0
        self.__enabled = False
        self.__dbus_iface = dbus_iface

    @property
    def enabled(self):
        return self.__enabled

    def set_enabled(self, e: bool, msg: str = ''):
        if e and not self.__enabled:
            self.__cookie = self.__dbus_iface.Inhibit('DoNotSleep',0,msg,4)
            self.__enabled = True
            logging.info('Inhibit [msg:"{}", cookie:{}]'.format(msg,self.__cookie))
        elif not e and self.__enabled:
            self.__dbus_iface.Uninhibit(self.__cookie)
            self.__enabled = False
            logging.info('Uninhibit [cookie:{}]'.format(self.__cookie))

if __name__=='__main__':
    logging.basicConfig(level=logging.INFO, 
                        format='%(asctime)s %(message)s',
                        datefmt='%Y-%m-%d %H:%m:%S')

    bus = dbus.SessionBus()
    obj = bus.get_object('org.gnome.SessionManager','/org/gnome/SessionManager')
    iface = dbus.Interface(obj, 'org.gnome.SessionManager')

    net_inhibitor = SuspendInhibitor(iface)
    cpu_inhibitor = SuspendInhibitor(iface)
    diskio_inhibitor = SuspendInhibitor(iface)

    net_down = IntFile('/sys/class/net/wlp4s0/statistics/rx_bytes')
    net_up = IntFile('/sys/class/net/wlp4s0/statistics/tx_bytes')
    cpu_perc = CpuInfo()
    diskio_info = DiskIO()

    while True:
        for o in (net_down, net_up, cpu_perc, diskio_info):
            o.update()
        
        net_traffic = net_down.total(300) + net_up.total(300)

        if net_traffic > 50 * 1024 * 1024:
            net_inhibitor.set_enabled(True, 'Network traffic {} bytes/5min'.format(net_traffic))
        else:
            net_inhibitor.set_enabled(False)

        cpu_perc_avg = cpu_perc.average(60)

        if cpu_perc_avg > 55.0:
            cpu_inhibitor.set_enabled(True, 'CPU usage average {}%/1min'.format(cpu_perc_avg))
        else:
            cpu_inhibitor.set_enabled(False)

        diskio_bytes = diskio_info.total(60)
        # logging.debug('diskio_bytes (60s) = {}'.format(diskio_bytes))
        if diskio_bytes > 25 * 1024 * 1024:
            diskio_inhibitor.set_enabled(True, 'Disk IO {} bytes/1min'.format(diskio_bytes))
        else:
            diskio_inhibitor.set_enabled(False)

        time.sleep(1)

 ,

rumly111 ()

Как загрузить iso образ Chrome OS через GRUB2 ?

Форум — General

Ubuntu-based дистрибутивы научился загружать с iso, а для ChromeOS инфы не нашёл. Там какая-то странная структура каталогов, нигде такой не видел. Если кто знает, подскажите.

 , , ,

rumly111 ()

Курсор мыши дергается.

Форум — Games

Захотел поиграть в Даггерфол, но мышь странно себя ведет в игре. На стандартных настройках при перемещении курсор «прыгает» на своё предыдущее положение.

Попробовал запускать с переменными окружения SDL_VIDEO_X11_DGAMOUSE=0 и SDL_VIDEO_X11_MOUSEACCEL=«1/1/100» (отключает ускорение мыши). Вроде работает лучше, но когда двигаю курсором, потом останавливаю, курсор 1 раз прыгает вниз. В полноекранном и оконном режиме одинаково. В винде таких проблем не наблюдал.

Как пофиксить?

Из конфига досбокса:

( читать дальше... )

 ,

rumly111 ()

Как предотвратить ждучий режим при определенных условиях?

Форум — Desktop

Компьютер не уйдет в ждучий режим (suspend), если подергать мышкой или нажать клаишу.

Есть ли способ сделать так при следующих условиях?

  • Загрузка процессора превышает определенный порог. Например, идет какая-то компиляция или обработка видео, не хочу чтобы комп ушел в ждучий режим.
  • Интенсивное использование диска
  • Сетевая активность превышает определенный порог. Например, идет какая-то закачка

Желательно чтобы экран оставался выключенным.

 

rumly111 ()

Дилемма с Linux Mint

Форум — Linux-install

Всем привет.

У меня на ноуте стоит Linux Mint Mate Edition 18.0. Я люблю Mate, всегда рад, когда выходит новая версия. Так как Linux Mint - это та же убунта, то я предполагал, что и обновления происходят так же. То есть, если у меня Ubuntu 16.04, то если я регулярно обновляю пакеты, не нужно апгрейдить систему на 16.04.1, 16.04.2 итд при новом релизе. Так же я предполагал, что Linux Mint автоматически обновится на 18.1, 18.2 если регулярно обновлять софт. Выходит, что нет, так как /etc/os-release показывает 18.0, да и Mate староват.

У меня дилемма. С одной стороны, хочется пользоваться новым Mate. С другой стороны, думаю: «работает - не трогай». На рутовом разделе всего 3Гб свободного места осталось, может не хватить для апгрейда системы. Однажды у меня уже заканчивалось место при апгрейде, в результате пришлось сносить и ставить все с нуля. Куча софта уже установлена, не хочу морочиться, если вдруг система слетит. Да еще и подозреваю, что надо будет два раза dist-upgrade делать (18.0 -> 18.1, 18.1 -> 18.2)

В общем, поделитесь опытом апгрейда Ubuntu/LinuxMint, да и советом, стоит ли вообще обновляться. Компом редко пользуюсь в последнее время.

 ,

rumly111 ()

Убил часть винчестера

Форум — Linux-hardware

Сдури ударил кулаком по ноуту, и на винте появилась область, которую лучше не трогать.

Разбивка винта приблтзительно такая: 20Гб, 200Гб, 25Гб, 230Гб*. Как раз последний раздел (на нем ехт4) и поврежден. Все настолько плохо, что при чтении большинства битых блоков винчестер отключается, нужно выключить и включить компьютер чтобы снова появился.

На разделе около 60 миллионов 4К-блоков, методом проб определил, что повреждено несколько фрагментов на промежутке 23М-33М (сначала проверял badblocks с начала раздела до середины, потом от конца до середины). Сначала хотел пометить эти 10М блоков как битые утилитой fsck.ext4, но что-то пошло не так, думаю программа попыталась читать данные с поврежденных областей, винчак отключился в процессе, и я боюсь как бы не наделал еще больше беды. С тех пор раздел не монтировал, думаю как бы спасти данные. Это был мой /home раздел, там были все мои данные, а еще настойки программ, жалко терять.

Есть советы? Сейчас у меня идея примонтировать раздел read-only, спасти хотя бы минимум, а потом переразбить диск, выкинув «больную» его часть. Ну или может есть иные методы, например разделить ext4 на несколько частей, потеряв только поврежденные данные? Буду рад ценным советам.

 , ,

rumly111 ()

Текстовые альтернативы Life is Strange

Форум — Games

Прошел игру Life is Strange, и немного остался недовольным. Обзор игры делать не буду, но советую погрузиться в нее поклонников жанра игр «интерактивное кино».

Мой вопрос: есть ли похожие текстовые игры? (написанные на tads, instead, renpy или других движках). Мои критерии: никакой боевки (ну или самый минимум, чтобы не напрягала), наличие несложных пазлов опционально. Основной упор на развитие сюжета и персонажей, обследование окружающей среды, диалоги, сложные моральные выборы, которые влияют на сам сюжет. И чтобы были хотя бы 2-3 сильно отличающихся ветки сюжетных линий.

 

rumly111 ()

Function args tooltip for c++ like in jedi-mode

Форум — Development

jedi-mode позволяет превратить emacs в достаточно удобный инструмент для python-разработки. Есть там одна полезная фича: когда вызываешь функцию, то после ввода "(" появляется всплывающее сообщение, подсказывающее сигнатуру функции, пока не ввести ")" (http://imgur.com/0wQeq4C)

Для С++ есть irony-mode (https://github.com/Sarcasm/irony-mode), который через libclang умеет в том числе и автодополнение. Я использую его вместе с auto-complete, но соответсвующего tooltip-a оно не показывает. Как пофиксить?

 ,

rumly111 ()

Cannot connect to display :0.0

Форум — Desktop

После запуска xfce-сеанса большинство X-овых програм нельзя запустить («Cannot connect to display :0.0»). При этом бывает, что на панельке загрузятся все аплеты как обычно, а иногда половина может не загрузится.

Помогает только перезапуск xserver, и то только ctrl-alt-del, потому что из главного меню нельзя. После чего все работает, как и должно. Подозреваю, что тут дело в каком-нибуть .Xauthority-файле, который не удаляется когда нужно.

P.S.: C fluxbox таких проблем не наблюдал.

 , ,

rumly111 ()

Вопрос о поведении make menuconfig

Форум — General

До этого я пользовался gentoo-sources, но решил попробовать ck-sources. При этом я побоялся скопировать старый .config (и сделать make oldconfig), решив, что ck-патчи могут иметь какие-то несовместимые фишки.

Я подумал, что для нового ck-ядра сгенерируется default настройки и придется долго настраивать с нуля. А фиг там! make menuconfig откуда-то «стырил» почти все мои предыдущие настройки. Пришлось только включить BFQ-scheduler, ради которого я и перешел на ck.

Подозреваю, что настройки были взяты из /proc/config.gz . Прав ли я, нормальное ли это поведение для make (menu)config, и стоит ли ожидать каких-то проблем?

 , ,

rumly111 ()

Clementine - проблема с ape-тагами в mpc-файлах

Форум — Multimedia

У меня есть несколько альбомов с музыкой в формате mpc, файлы содержат APE-таги. При этом есть альбомы, в которых есть CD1 и CD2, для такий файлов я пробовал применять таги (утилитой apetag)

MEDIA=1 (такие выставляет cue2tracks)
DISC=1
DISCNUMBER=2
Part=1 (то ли DeadBeef, то ли EasyTag) 
Все эти значения Clementine игнорирует, тоесть файлы с CD1 и CD2 оно упорядочнит неправильно: №1 (диск1) - №1 (диск2) - №2 (диск1) - №2 (диск2) - ...

Пробовал отредактировать таги встроенным редактором Clementine, но для всех mpc-файлов «Номер диска» вообще считается 0, скорее всего не знает откуда его взять. Если же выставить свое значение и сохранить файл, то значение потеряется.

Пошел посмотреть в сорцы taglib, там нашел такую таблицу соответствия, видимо «внутренним» именам тагов в Clementine, и таковым в APE-тагах для MPC-файлов (https://github.com/taglib/taglib/blob/master/taglib/ape/apetag.cpp)

static const char *keyConversions[][2] = {{"TRACKNUMBER", "TRACK" },
    {"DATE", "YEAR" },
    {"ALBUMARTIST", "ALBUM ARTIST"},
    {"DISCNUMBER", "DISC" },
    {"REMIXER", "MIXARTIST" }}; 

Прописал в файлах эти варианты, но Clementine все равно игнорирует. Кстати, ALBUMARTIST тоже не берется во внимание, но с этим еще можно жить.

Как пофиксить баг, или хотя бы где он может быть? Ну или посоветуйте, какой вариант название тагов использовать?

 , , ,

rumly111 ()

Как избавиться от квадратиков в видеороликах Neverhood? (scummvm)

Форум — Games

Все видеоролики в игре показывает квадратиками, что портит впечетление от игры. ScummVM собирал с флагами

./configure --disable-debug --enable-release --enable-mpeg2
--disable-all-engines --enable-engine=neverhood
--host=x86_64-pc-linux-gnu --backend=sdl
--enable-zlib --enable-alsa
Версия Neverhood - русская.

 ,

rumly111 ()

Как собрать Konquest (часть kdegames) с минимальными зависимостями?

Форум — Desktop

Хочу поиграть в Konquest, но КДЕ устанавливать не хочу. Я прикинул, что мне нужно будет установить kdelibs, libkdegames, ну еще может phonon (хотя лучше было бы без него).

Как собрать Konquest, чтобы не надо было устанавливать soprano, qtwebkit, polkit-qt и кучу всякого ненужного хлама? Какие ключи нужно передать cmake?

Ну или может уже есть где-то собрано?

 , , ,

rumly111 ()

Еще одна альтернатива lightsOn.sh и caffeine

Форум — Desktop

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

Зависимости: devilspie, xprop, xdotool.

Конфиг для devilspie (~/.devilspie/flash.ds):

(if
  (or
    (is (application_name) "plugin-container")
    (and
        (contains (application_name) "chromium-browser")
        (contains (application_name) "flash-plugin")
    )
  )
  (begin
     (focus)
     (spawn_async 
        "/home/user/bin/keyShift.sh" 
        (str (window_xid))
     )
  )
)
Маленький bash-скрипт (~/bin/keyShift.sh):
#!/bin/bash

sleep 5
while true; do
    if xprop -id $1 _NET_WM_STATE | grep -q _NET_WM_STATE_FULLSCREEN ; then
        xdotool key shift
        sleep 20
    else
        exit 0
    fi
done

Перемещено leave из linux-org-ru

 

rumly111 ()

Как установить в Gentoo красивые иконки Lubuntu?

Форум — Desktop

Пробовал скопировать с Lubuntu /usr/share/icons/{elementary,elementaryLubuntu,elementary-mono-dark,lubuntu}, перегенерил кеш иконок

gtk-update-icon-cache $dir

Но когда меняю в настройках иконки, их не видно. Структура каталогов с иконками иная, как, например, в дефолтной nuoveXT2, но думаю пути прописаны в index.theme

 ,

rumly111 ()

RSS подписка на новые темы