LINUX.ORG.RU

Сообщения rumly111

 

qBittorrent использует 1.3Gb памяти. Так и должно быть?

 , , ,

перешёл на qbittorrent где-то год назад с transmission, причину уже и не помню. в conky у меня qbittorrent №1 по использованой памяти (1.3Гб из 16Гб). я вот подумал, а не много ли это для торрент-качалки?

вообще у меня целый зоопарк для торрентов (rtorrent, aria2c, ctorrent, transmission-cli), иногда ими пользуюсь. думаю, не перейти ли на transmission-daemon, но лень настраивать, и qbittorrent всем устраивает в принципе.

есть ли способ уменьшить прожорливоть qbittorrent?

rumly111
()

Raspberry Pi - какой выбрать?

 ,

Недавно у меня сдохли оба компа, и я недолгое время живу на RaspberryPi3 B+. Это удивительный опыт, потому что фактически веб-браузер запускать тут противопоказано. Я даже Х-сервер редко запускаю, живу в тёмной-претёмной консоли. Пришлось искать консольные версии программ для своих повседневный задач, например для просмотра youtube(newsboat+yt-dlp+vlc, ytfzf) и аниме(ani-cli, anicli-ru), консольный браузер (elinks, собирал с поддержкой js и python). Для облегчения своих задач написал пару скриптов, что очень увлекательно.

А сейчас я хочу спросить совета, так как хочу обновить свой RPi3 на более современную модель. Копмьютер использую в основном для ютуба, реддита, сёрфинга, читать новелы. А игрушки люблю больше коллекционировать, чем играть. Например могу потратить много часов, чтобы скомпилировать игрушку или эмулятор старой консоли с флагами -O3 -march=native, а потом никогда в них не играть. А ещё у меня есть внешний HDD-диск, который правда приходится подключать к телевизору чтобы фильмы смотреть.

Началось всё с того, что мне не хватало 1Гб оперативки и отсуствие аппаратного декодирования H265. Узнал, что в поздних моделях всё есть, и тогда я увидел ЕЁ. Говорю о Raspberry Pi 400, в форм-факторе клавиатуры, 4Гб ОЗУ и частотой процессора 1.8 ГГц. Если брать полный набор с microSD картой, мышкой, HDMI-кабелем, блоком питания, то получается прикольный набор. А самое глубокое впечетление на меня произвела нарисованная малина на microSD-карте с предустановленной ОС. Это же ведь так круто! Конечно, я понимаю что это глупо и я повёлся на маркетинговый ход, но мысль купить себё это штуку так укоренилась во мне, что я чуть ли не потерял сон.

На польноценный комп у меня нету бюджета, но любой вариант RPi4/RPi5 я потяну, и на данный момент выбираю между Raspberry Pi 4 (8Gb RAM), Raspberry Pi 5 (8Gb RAM) и Raspberry Pi 400.

RPi5 это устройство «на вырост», в нём всё есть что мне нужно, можно разогнать CPU до 3ГГц и GPU до 1ГГц, правда придётся докупить USB аудиокарту, и охлаждение с вентилятором. Мне нравится, когда компьютер работает тихо, и боюсь не будет ли мне шум вентилятора мешать. А ещё это почти полноценный комп, можно и браузер запускать, и игры посовременнее.

RPi4 во всём хуже чем RPi5, но зато проц медленнее, не нужно сильно заморачиваться с охлаждением. Может и простой радиатор подойдёт. Если взять с 8Гб оперативки, проблема нехватки памяти отпадёт. H265 поддерживается, и хотя пишут что бывают тормоза на видео высокого качества (60fps 1080p+), думаю VLC справится. И 3.5mm аудиовыход есть для подключения колонок.

Ну и виновник моих скитаний – Raspberry Pi 400, с охлаждением не нужно парится, 1.8ГГц частота процессора с возможностю разгона до 2.2ГГц, ОЗУ только 4Гб, так что барузер придётся ограничить. И эффект крутизны не надо забывать, хотя чувство эйфории пройдёт через пару дней использования. 3.5mm аудиовыхода нет, на 1 USB-порт меньше, на пузо не положишь, так что всё равно подключю свои клавиатуру и мышь.

Думаю я уже подсознательно сделал выбор, но мне интересно узнать ваше мнение.

Перемещено hobbit из talks

rumly111
()

Удалить PPA и откатить все пакеты

 , ,

Поставил Lubuntu LTS, в которой LXQt версии 0.17.0

Работает хорошо, но хотелось бы попробовать новую версию LXQt. Предлагают возможность установить из PPA.

Если мне не понравится, то как удалить PPA и откатить все версии пакетов?

UPD:

Нашёл статью, где написано как обновиться и возможность откатить обновление: https://ubuntuhandbook.org/index.php/2022/09/install-lxqt-1-10-lubuntu-22-04/

rumly111
()

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

 ,

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

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

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

rumly111
()

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

 ,

В Колибри есть возможность загрузить линуксовый драйвер 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-игры?

 , , ,

Если использовать 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

 , , ,

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

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

rumly111
()

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

 , , , ,

Есть две сети - домашняя 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
()

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

 ,

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

Скрипт срабатывает при сетевой активности (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 ?

 , , ,

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

rumly111
()

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

 ,

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

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

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

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

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

rumly111
()

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

 

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

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

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

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

rumly111
()

Дилемма с Linux Mint

 ,

Всем привет.

У меня на ноуте стоит 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
()

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

 , ,

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

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

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

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

rumly111
()

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

 

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

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

rumly111
()

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

 ,

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

 , ,

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

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

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

rumly111
()

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

 , ,

До этого я пользовался 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-файлах

 , , ,

У меня есть несколько альбомов с музыкой в формате 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)

 ,

Все видеоролики в игре показывает квадратиками, что портит впечетление от игры. 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
()

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