投稿

マジックSysRqキー(Magic SysRq key)の有効化と永続化

近頃、公式から許可をもらいスタンドアロン化した S.T.A.L.K.E.R. Anomaly というStalkerのModで遊んでいるが このゲームをやっていると急に止まることがある ゲームが落ちたりフリーズするだけではなく、PC自体がフリーズしてしまうのだ Alt+F4やAlt+Tabも効かないので、ゲームを閉じることもウィンドウを切り替えることも出来ない ゲームが悪いのか、Wineが悪いのか、中古のグラボが悪いのかはわからないが、突然なんの操作もできなくなるのは困る 経験則からファイルの保存を先延ばしにしたりしないし 最近のブラウザは異常終了後にタブの復元を行ってくれるのでこれらは問題ない しかし何より怖いのはSSDやHDDやUSBメモリの破損である 果たしてSSDが強制終了に強いのか弱いのかは知らないが、良い影響を及ぼさないのは確実だろう 実際に強制終了後の起動時にはfsckのログが多数流れるので心臓にもよろしくない そこで出来るだけ安全に再起動させるのが、このマジックSysRqキーである これはカーネルレベルでコマンドを実行させることで ウィンドウマネージャやX11がフリーズしても特定の操作ができるようになっている・・・・らしい この時使うキーがSysRqなのでマジックSysRqキーと呼ぶようだ 実行方法は以下のキーを一定時間を開け、上から順番に押していく  基本的にSysRqキーはAltとPrintScreenの組み合わせなので書いているが違う場合もあるらしい キー 意味 説明  Alt + PrintScreen + R   unRaw  キーボードの制御を取り戻す オマジナイ?  Alt + PrintScreen + E   tErminate  すべてのプロセスに正常終了命令を送る  Alt + PrintScreen + I   kIll  すべてのプロセスに 強制 終了命令を送る  Alt + PrintScreen + S   Sync  書き込み予定のキャッシュをすべて書き込む ...

Qtでのカスタムウィジェットの作り方

イメージ
Qtには便利なウィジェットが数多く用意されているが、それぞれに適した機能のみが実装されている 描画についてはQt Style Sheetsによって、強力なカスタマイズが可能だが 対応しているプロパティは限定的であり、動的な変更に向かない、また対象環境を考慮しづらいのが欠点である 対象環境を考慮しづらいというのは例えば、QLabelの背景色に白を想定し、枠線色をスタイルシートで黒に設定するとしよう これがもしユーザーのテーマの背景色が黒だった場合に色が同化し枠線の意味をなくしてしまう これを防ぐために背景色をスタイルシートで白に固定させると今度は文字色が被り、文字色を黒に設定する必要が・・・となってしまう 左から想定、テーマが黒、背景色を白指定 しかし、カスタムクラス化し描画やイベント時の動作を書き加えることで、より広範囲にカスタマイズすることが可能だ 例としてQSliderをカスタムクラス化し、文字を表示できるよう順を追って説明していく まず通常が画像のようになっているがこれに文字を追加するにはQSliderのカスタムクラスを作成する //ヘッダ class CustomSlider : public QSlider { Q_OBJECT public: explicit CustomSlider(QWidget *parent = nullptr); explicit CustomSlider(Qt::Orientation orientation, QWidget *parent = nullptr); protected: void paintEvent(QPaintEvent *e) //描画を行う }; //ソース CustomSlider::CustomSlider(QWidget *parent) : QSlider(parent) { } CustomSlider::CustomSlider(Qt::Orientation orientation, QWidget *parent) : QSlider(parent) { setOrientation(orientation); } CustomSlider:paintEvent(QPaintEvent *e) { QS...

Qt Creator 4.7が遅い

Qt Creator 4.7のテキスト編集が遅い Qt Creator 4.7にバージョンアップされて時間が経っている上に、既にArchの方では4.7.1が出ているので、解消されるかもしれないが念の為 Qt Creator 4.7でコードを書いていると、変数名や関数名などの色付けが遅れることが多発する それはまだ良いのだが、補完候補の表示も遅れるので非常に苦痛 解消するには メニューの [ヘルプ] から [プラグインについて] を押下し開いたウィンドウから ClangCodeModel のチェックを外し再起動 ただ、今後高速化の可能性もあるので、変更したことは覚えておくこと

Manjaro Linuxでパッケージのダウンロードが遅い場合の対処法

Manjaro Linuxでpacmanパッケージのダウンロードが遅い pacmanパッケージのダウンロードを行う際には自動的にミラーサーバからダウンロードが行われる しかし、このミラーが適切に設定されていないとダウンロードに非常に時間がかかる Manjaro XfceやMateエディションを使用している場合、pacmanのGUIフロントエンドとしてpamacがインストールされており、その設定画面からミラーの設定と更新ができる ここで更新したミラーサーバの内容は /etc/pacman.d/mirrorlist で確認できる しかし、ここで取得したにも関わらず知らぬ間にダウンロード速度が遅くなっている場合がある 上記のmirrorlistを確認してみると、日本から遠いミラーに設定されてしまっている これはGUIフロントエンドのpamacのサービスが定期実行されており、自動的にミラーの更新が行われている事が原因である サービスの内容は /usr/lib/systemd/system/pamac-mirrorlist.service で確認できる このファイルを上書きすることも出来るが、pamacが更新されると内容も戻ってしまう そのためドロップインファイルを作成することで適用させる  下記はその方法 まず適当なテキストエディタに上記 /usr/lib/systemd/system/pamac-mirrorlist.service の内容を貼り付け、その中の ExecStart=/usr/bin/pacman-mirrors -f8 と書かれているところを ExecStart=/usr/bin/pacman-mirrors --country all に書き換え   そうしたら端末で sudo systemctl edit pamac-mirrorlist を実行、するとおそらくnanoで編集が始まるので、上記で書き換えたテキストエディタの内容を貼り付けし書き込みを行う   ちなみにnanoエディタの下部に表示されているショートカットの ^ はCtrlキーを押すことである   つまり貼り付けの ^U は Ctrl+U 、書き込みの ^O は Ctrl+O でそれぞれ実行できる ...

PlayOnLinuxでインストールリストが表示されない場合の対処法

PlayOnLinuxでインストールボタンを押しても読み込み中のまま進まない場合の対処法 PlayOnLinuxにはインストールするアプリケーションを選択するリストがあるが インストールボタンを押しても読み込み中のまま表示されない 端末から開いてみると Exception in thread Thread-1: Traceback (most recent call last):   File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner     self.run()   File "mainwindow.py", line 111, in run     self.real_check()   File "mainwindow.py", line 78, in real_check     self.sendToStatusBar(_('Refreshing {0}').format(os.environ["APPLICATION_TITLE"]), True) KeyError: '0 ' このようなエラーが出力されている この場合の対処法は以下の通り /usr/share/playonlinux/python/mainwindow.py を管理者権限のテキストエディタで開く 例 Ubuntu gksudo leafpad /usr/share/playonlinux/python/mainwindow.py Ubuntu Mate gksudo pluma /usr/share/playonlinux/python/mainwindow.py Linux Mint 18 gksudo xed /usr/share/playonlinux/python/mainwindow.py 78行目の self.sendToStatusBar(_('Refreshing {0}').format(os.environ["APPLICATION_TITLE"]), Tru...

Qt Tips

Qt Code QtCreatorやQtアプリケーションで日本語入力する sudo apt-get install fcitx-libs-qt5 /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/ 内の /libfcitxplatforminputcontextplugin.so を /Tools/QtCreator/lib/Qt/plugins/platforminputcontexts/ と /[version]/gcc_64/plugins/platforminputcontexts/ にそれぞれコピー デバッグログに出力 qDebug() << "Hello World";  >>Hello World int num = 50; qDebug() << "Number is" << num;  >>Number is 50 基本的な変数であれば直接表示してくれる カーソル位置に対象のウィジェットがあるか判定する関数 bool MainWindow::isTarget(QWidget *wid) {   if (!wid->isVisible())     return false;   return wid->rect().contains(wid->mapFromGlobal(QCursor::pos())); } EventFilterの引数にある*QObjectでは マウスカーソル位置のウィジェットを取得するので 対象のウィジェット内にカーソルがあるか判定したい時はこっち connect()やQTimer::singleShot()で変数を渡す QString str = "OK"; QTimer::singleShot(3000,[=](){ qDebug() << str; });   After 3sec >>OK  connect(pushButton,&QPushButton::clicked,[=]()...