понедельник, 22 января 2024 г.

Як розлочити юзера в лінукс?

 Юзер був заблочений через 3 невдалих ввода пароля. І треба чекати 10 хвилин.

Ось одне із існуючих рішень:

# faillock --user username --reset

суббота, 18 ноября 2023 г.

Gnome: Як виводити нові вікна в центр?

Дуже не подобається що нові вікна відкриваються де попало. Я очикую нове вікно по центру екрана. І для цього є чудова команда 

 gsettings set org.gnome.mutter center-new-windows true

Насолоджуйтесь. 

Мирного неба. 

четверг, 18 июня 2020 г.

Как словить событие формы OnMove в Delphi

Я не нашел такого события OnMove для формы в Delphi XE8. Как дела обстоят в более старших версиях не знаю. Но вот как это решается для моего случая - просто добавляем обработчик сообщения WM_MOVE в форму:
procedure OnMove(var Msg: TWMMove); message WM_MOVE;

....

procedure TMyForm.OnMove(var Msg: TWMMove);
begin
  DoSomething;
end;
Сообщение WM_MOVE приходить когда пользователь схватил форму, перетащил и отпустил. Если вам нужно ловить событие во время самого движение добавьте обработчик WM_MOVING.


четверг, 29 ноября 2018 г.

SSH Тунель

Ситуация: в офисе на рабочей машине крутиться несколько виртуальных машин, к которым я подключаюсь через RDP.  Иногда я работаю из дому. А открыт только SSH к моей рабочей машине.
Я думал просить, что бы админ пробросил еще порты на некоторые виртуалки, но... сами понимаете. Никто не хоче делать из своего сервера решето.
Но как оказалось одного проброшенного 22 порта хватает для множества задач.
Можно пробросить порты через SSH тунель

ssh -N -p 22123 myoffice.com -L 55389:localhost:3389
тут
-N не выполнять команд на той стороне

-p 22123 порт сервера, который проброшен на 22 порт моей офисной машины

-L 55389:localhost:3389 а это как рази есть прброс порта через SSH. Тут 55389 это порт, который будет на моей домашней машине, а 3389 это порт который на моей офисной машине.
После этого нужно просто подключиться к своей домашней машине на порт 55389.
 xfreerdp /v:localhost:55389 /bpp:16 /workarea -decorations +auto-reconnect

А вот так можно пробросить сразу несколько портов:
ssh -N -p 22055 myoffice.com -L 55389:localhost:3389 -L 55390:localhost:3390 -L 55621:localhost:6021 -L 55622:localhost:6022





четверг, 30 марта 2017 г.

Как отключить Blueman-applet в KDE

Я пользуюсь разными окружениями KDE, awesome, qtile... по настроению или в зависимости от текущих задач.
Мне нужен bluetooth т.к. я пользуюсь bluetooth наушниками.
В KDE есть bluedevil, а для других WM я пользуюсь blueman-applet.
Но blueman-applet запускается в KDE, хотя где это прописано я не смог найти.
Зато нашел решение как запретить блюману запускаться в KDE.
  1.  cp /etc/xdg/autostart/blueman.desktop ~/.config/autostart
  2. vim  ~/.config/autostart/blueman.desktop
  3. Дописать
    NotShowIn=KDE


четверг, 29 сентября 2016 г.

Как отключить BEEP в TEdit при нажатии Enter?

Нужно просто обнулить переменную Key в обработчике OnKeyPress
procedure TfrmMain.cbxTestCaseFilterKeyPress(Sender: TObject; var Key: Char);
begin
  case Ord(Key) of
    // {Enter} Apply Filter
    13: begin
          actTestCaseFilterApply.Execute;
          Key := #0;
        end;


понедельник, 14 декабря 2015 г.

Убить подключение на порт

Есть виртуальная машина VirtualBox с возможностью подключения через VRDP.
Подключаюсь к ней с разных компов. Но установил, что подключение может быть только одно.  Поэтому если забыл закрыть сеанс на другом компе, то с этого не получится подключиться. Но есть ssh доступ на сервер, где крутится эта виртулка.
И убиваем подключения так:
1 magedon@magedon ~ % sudo lsof -i :3389
COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
VBoxHeadl 2392 magedon   22u  IPv4  34903      0t0  TCP *:ms-wbt-server (LISTEN)
VBoxHeadl 2392 magedon   23u  IPv6  34904      0t0  TCP *:ms-wbt-server (LISTEN)
VBoxHeadl 2392 magedon   34u  IPv4  30654      0t0  TCP magedon:ms-wbt-server->192.168.1.173:62261 (ESTABLISHED)


1 magedon@magedon ~ % sudo tcpkill host 192.168.1.173
tcpkill: listening on enp3s0 [host 192.168.1.173]

И так все команды требуют рута, поэтому делаем через sudo.
sudo lsof -i :3389 - показывает кто подключен к нужному мне порту 3389. Кроме виртуал бокса видим что тут есть кто-то с компа с IP 192.168.1.173
tcpkill host 192.168.1.173 убиваем подключение с данного компа.
tcpkill не входит в стандартную поставку linux, поэтому мне пришлось ставить отдельный пакет dsniff, в который входит эта утилита

Нашел также ещё один способ решения такой проблемы:
fuser -k 3389/tcp

вторник, 24 ноября 2015 г.

Вход в Windows без пароля

Для хост системы я всегда ставлю пароль. Ибо нечего лазить по моему компу без моего ведома.
А вот для виртуальных машин это уже не так критично. Поэтому задался вопросом как сделать так что бы эта виртуальная Windows  не спрашивала каждый раз пароль. Итак:
Раз. 
Запускам команду netplwiz: нажимаем Win+R и вводим netplwiz
Два. 
Появится окно User Accounts. Тут нужно выбрать пользователя и снять галочку
Три.
После этого нужно будет только ввести пароль для этого пользователя и всё.

четверг, 14 мая 2015 г.

Skype отключить нотификацию

В скайпе как обычно несколько чатов. Есть нужные и важные, а есть просто спамилки. Вот эти спамилки иногда так спамят, что хочется выйти из них. Отвлекают от работы. Из за них не обращаешь внимание на нужные нотификации.
В Windows версии в интерфейсе есть возможность отключить нотификации. А в линукс версии нету такой возможности.
Но оказывается Skype поддерживает команды прямо в окне чата.
Вот как отключить нотификацию конкретного чата.

  1. Зайти в чат
  2. Ввести /alertsoff
Всё. Теперь пиликать и вылетать попап с новым сообщением для этого чата не будет. Но чат будет подсвечивать количество не прочитанных сообщений. 

Вот список команд для чата Скайпа
 /me [text]
 /topic [text]
 /add [skypename+]
 /alertson [text]
 /alertsoff
 /leave
 /get creator
 /get role
 /whois [skypename]
 /setrole [skypename] MASTER|HELPER|USER|LISTENER
 /kick [skypename]
 /kickban [skypename]
 /get uri
 /get options
 /set options [[+|-]flag] ..
 /setpassword [password] [password hint]
 /clearpassword
 /get password_hint
 /get banlist
 /get allowlist
 /set banlist [[+|-]mask] ..
 /set allowlist [[+|-]mask] ..
 /golive [token]
 /invite [skypename]
 /fork [skypename+]
 /help

воскресенье, 5 октября 2014 г.

VirtualBox как удалённо задать разрешение

Доброго времени суток.
Есть удалённый комп, на котором крутится виртуальная машина (VirtualBox) с Ubuntu 10.10.
Иногда при подключении через rdesktop не работает явное указание разрешения. То есть задаю разрешения 1280х800, а оно его не применяет. В настройках экрана в гостевом гноме нет нужного разрешения, а вносить его вручную через xrandr каждый раза не хочу...
Нашел способ поменять разрешение самой виртуальной машине. Для этого нужно зайти через ssh на удалённый хост  и выполнить команду:
VBoxManage controlvm <ИмяВиртуалки> setvideomodehint 1280 800 16
, где 1280 800 - это разрешение, а 16 - глубина цвета

среда, 24 сентября 2014 г.

Putty: как выключить системный звук

Есть привычка вместо написания команды полностью, добивать её с помощью Tab. Когда работаю в linux это проблем не вызывает. Но вот пришлось пользоваться putty в windows.
Этот системный "бум-бум" начал раздражать. Пришлось смотреть как его выключить. Оказалось довольно просто: правый клик по заголовку окна putty, Change Settings...
Дальше Terminal->Bell и выбираем что душе нравится.

P.S. Однако оно показало как часто я использую Tab при вводе команд.

воскресенье, 14 сентября 2014 г.

java: Too many levels of symbolic links

После какого-то обновления перестала запускаться java  на моём Арче. Пишет:
/usr/bin/java: line 2: /usr/lib/jvm/default/bin/java: Too many levels of symbolic links
/usr/bin/java: line 2: exec: /usr/lib/jvm/default/bin/java: cannot execute: Too many levels of symbolic links

Решение: запустить програмку
sudo archlinux-java fix

понедельник, 4 августа 2014 г.

Skype 4.3 падает при старте

Обновился скайп для linux с версии 4.2 до версии 4.3 где-то месяц назад. Я попробовал, но он падал, и ещё хотел pulseaudio.
Однако старая версия ещё работала и я ничего не делал. Но вот настало 2 августа 2014 и старая версия перестала поддерживаться. А Skype мне нужен для работы :(.

Пришлось ставить pulseaudio. Однако проблему падения надо было решить. Нашел 2 решения.


Удалить папку ~/.Skype

rm -Rf ~/.Skype
Это меня не устраивало, т.к. терялась вся история всех переписок.

Поправить данные в ~/Skype/[username]/main.db. 

Там проблемы с записями, которые содержали информацию о передаваемых файлах.
$ sqlite3 ~/.Skype/[username]/main.db
> UPDATE Messages SET body_xml=substr(body_xml,instr(body_xml,'> .quit
но тут меня смутило что искалось  по слову posted, а у меня там было несколько языков. В общем не сработало.

Удалить проблемные записи. 

sqlite3 .Skype/[USERNAME]/main.db
sqlite> DELETE FROM Messages WHERE type=68;
sqlite> .quit

У меня заработал вариант с удалением проблемных записей и т.к. эти записи содержали только информацию о передаваемых файлах, то меня это устроило.

вторник, 19 марта 2013 г.

umount... device is busy? Кто держит мою флешку?!!!

Частенько после того как поработал с флешкой, внешним или сетевым диском не возможно его нормально демонтировать - device is busy!

Вопрос кто держит мою флешку?

Ответ можно получить в два хода
fuser -m <устройство или точка монтирования>
получим PID а дальше
ps -A|grep <PID который получили>
Дальше можно соорудить конвеер, чтобы сразу получить имя процесса, который держит устройство. Но не сейчас.

Например как я узнал, кто захватил мой внешний диск

root@legatus ~ # fuser -m  /run/media/magedon/7f9776a7-7cef-4105-860c-17a723220f85
/run/media/magedon/7f9776a7-7cef-4105-860c-17a723220f85:   645
root@legatus ~ # ps -A|grep 645
  645 ?        01:05:51 skype
и так мой диск захватил skype. Скайп выключил штатным методом, без всяких киллов.
И дальше просто демонтируем диск тоже штатными средствами. 

P.S. Кстати, а что это понадобилось Майкрософту на моём диске? Ведь скайп уже Майкрософт.
Пора искать альтернативу скайпу.

пятница, 15 марта 2013 г.

WebBrowser x64 && Java Applets

Система ArchLinux x64
Установленные пакеты:

  • jdk7-openjdk
  • jre7-openjdk

Хочу Ява Приложение запускаемое с сайта банка.

При переходе на страничку с java апплетом меня просто перекидывало на сайт Oracle с предложением установить java.

Думал, что надо ставить 32ный браузер с 32ной явой.

Но попробовал поставить icedtea-web-java7 и все заработало.

Надо будет попробовать еще WebEx. Интересно будет ли работать звук?

суббота, 9 марта 2013 г.

Как заставить Konqueror нормально отображать страницы

Доброе время суток, Все!

Преамбула

В рабочей обстановке мне нужно подключаться к одним и тем же сервисам под разными аккаунтами. Например к gmail.comCalendar Google и так далее и тому подобное. И каждый раз при этом мне нужно уточнять каким аккаунтом нужно подключится. И хорошо ещё что сервис спрашивает.
Решил я эту проблему тем что пользуюсь несколькими браузерами одновременно. До недавнего времени это были Chromium и Firefox. Но настало время что мне их стало не хватать. Но т.к. я пользуюсь KDE, в который по умолчанию включен свой веббраузер Konqueror, который может работать как и Dolphin. Название слеплено из KDE + conqueror. Conqueror, A214 -  британский тяжёлый танк 1950-х годов

Теперь суть

Как оказалось, у нашего танка можно менять движки. По умолчанию он использует KHTML и поэтому отображение некоторых страниц довольно корявое. В частности gmail сразу говорит, что браузер не совместим. Поэтому нужно заменить этот движок на WebKit.
Для начала нужно поставить этот движок в систему. У меня в арче это делается так
pacman -S kwebkitpart
В вашей системе смотрите сами как.
Потом просто запускаем Konqueror и в настройках меняем ему движок.
По английски эта опция называется Default web browser engine.

Вывод

После этого Konqueror стал показывать как Chromium. Однако для меня он всётаки не удобен.

вторник, 5 февраля 2013 г.

Chromium постоянно просит пароль

Как же меня достал этот Chromium! Постоянно просит пароль!
Вначале я терпел. Пытался вводить пароль. А ему плевать.

В общем нашёл ключик как это отключить -  запускать его с параметром --password-store=basic
Командная строка будет выглядеть примерно так
/opt/google/chrome/google-chrome --password-store=basic %U
Что это означает не искал. Возможно не самое правильное решение, но он перестал меня доставать. 

четверг, 8 ноября 2012 г.

Групповая обработка файлов в bash (цикл for)

Есть две папки
  1. bin - куда собирается программа
  2. 10y - папка с материалами, с которыми должна работать программа.
Раньше я просто копировал папку с материалами в bin. Однако настало время что я узнал, что мой винт не резиновый а материалов там пол Гига.

В общем решил симлинки положить в bin. Но создавать в ручную около 50 симлинков лень. Решил поискать как это дело можно автоматизировать.
Нашел.

Итак, структура каталогов следующая

project
├── 10y
├── bin
...
└── src


for file in 10y/*; do ln -s ../10y/$file ../bin/$file; done
  1. Заходим в каталог project
  2. Пишем выше приведенную строчку и жмем ентер
  3. Наслаждаемся результатом ))
следующая строка ищет все файлы и каталоги в папке 10y
for file in 10y/*;
где  file - это переменная итератор

далее создает для каждого выбранного файла или каталога относительный симлинк в папке bin
do ln -s ../10y/$file ../bin/$file;
значение переменной извлекается через  $, поэтому пишем не просто file, а $file

В общем виде цикл организован так
for <переменная итератор> in <маска>; do <действие>; done
Обратите внимание на точки с запятыми do и done - это обязательно

суббота, 18 февраля 2012 г.

Как убрать закладки у PageControl?

Уже много раз нужно было убрать у TPageControl эти закладки. Не TabSheet,  а именно сам заголовок. Мне нужно было для визарда, для формы настроек, где слева дерево, а справа страница с контролами.
Как сделать это с TPageControl сразу не понятно и поэтому как я только не изголялся - использовал и TFrame, и TNoteBook. Всё неудобно. Но как это сделать с TPageControl я долго не искал, потомучто нужно было делать срочно.
И вот настал момент, когда сказали переделать существующий PageControl, у которого около 20 страниц, на каждой из которых может быть до 20 контролов. Переделывать все это заново как-то не хотелось.
Правду люди говорят:
"Лень -  двигатель прогресса"
Нашел как это сделать. И все оказалось очень просто. И так.

  1. Кидаем на форму TPageControl.
  2. Устанавливаем  TPageControl.Style := tsButtons.
  3. Заполняем его TTabSheet-ами
  4. У каждого табшита устанавливаем TabVisible := False;
  5. Потом присваиваем TPageControl.ActivePage := TabSheet1;
В моем случае я сделал при создании формы
 pcMain.Style := tsButtons;
 for I := 0 to pcMain.PageCount-1 do
    pcMain.Pages[I].TabVisible := False;
 pcMain.ActivePage := tsBasic;

Заполнил TreeView нодами с заданными значениями SelectedIndex. Потом в TTreeView.OnChange 

procedure TfrmMain.PropTreeChange(Sender: TObject; Node: TTreeNode);
begin
  case Node.SelectedIndex of
    10  : pcMain.ActivePage := tsBasic;
    20  : pcMain.ActivePage := tsDocs;
    30,
    31  : pcMain.ActivePage := tsTextsOffer;
    32  : pcMain.ActivePage := tsTextsInfo;
...

где tsBasic и тому подобные - это TTabSheet


Вот и все

пятница, 17 февраля 2012 г.

Проблемы с наследниками TFrame

Добавил в проект фрейм  TCustomTextFrame = class (TFrame). Визуальных контролов на него не ложил. Просто добавил нужные свойства, методы, объявил абстракные...
Добавить наследника TCustomTextFrame  через File/Add New/Other/Inherited не получилось.
Добавил простой фрейм и вручную в коде поменял ему предка с TFrame на TCustomTextFrame 
TframeTextsOffer = class(TCustomTextFrame)
Всё  нормально подхватилось и заработало.

Самое интересно началось на следующий день - при открытии в дизайнтайме TframeTextsOffer вылетала ошибка, что нет такого свойства как ClientHeight. Компилялось молча, но при запуске приложения тоже ругалось на ClientHeight.

Оказалось что делфи почемуто добавляет внуку, так сказать, фрейма в *.dfm свойства ClientHeigh, ClientWidth и ещё кучу всякого. Но у фрейма такого нет. Вот и ругается.
Но простое удаление не дает результатов -  делфи при открытии TframeTextsOffer  в дизайнтайме упорно добавляет эти свойства, на которые потом сама же и ругается.

Помогло только изменение вручную в *.dfm object frameTextsOffer: TframeTextsOffer  на inherited frameTextsOffer: TframeTextsOffer.

Не знаю насколько это правильно, но пока работает.